注册 登录
编程论坛 C++教室

排列问题

wandison 发布于 2009-11-22 19:18, 554 次点击
template<class T>
inline void swap( T& a, T& b )
{
    T tmp = a;
    a = b;
    b = tmp;
}

template<class T>
void Perm( T list[], int start, int end )
{
    int i;
   
    if ( start == end )
    {
        for ( i = 0; i <= end; i++ )
            cout << list[i];
        cout << endl;
    }
    else
        for ( i = start; i <= end; i++ )
        {
            swap( list[start], list[i] );
            Perm( list, start+1, end );
            swap( list[start], list[i] );
        }
}


这个算法中既然i=start,swap(list[strat],list[i])有什么用?
2 回复
#2
shenyulv2009-11-22 23:50
我现在刚刚教到模板,顶顶
#3
无诲今生2009-11-23 09:26
for ( i = start; i <= end; i++ )
        {
            swap( list[start], list[i] );
            Perm( list, start+1, end );
            swap( list[start], list[i] );
        }

第一次循环时,swap( list[start], list[i] );相当没用,但是到其他的循环时就有用了,因为i的值是增加的,直到和end相等
1