1

C++ で Heap のアルゴリズムを実装しようとしています。
ただし、並べ替える文字列の長さが 4 になると、アルゴリズムは繰り返しを開始します。コードは次のとおりです。

void permute(int n, string str, int *total,string array[]){

    if (n==0){
        
        array[*total] = str;
        *total += 1;
    
    }

    else{
    
        for(int c=0; c<=n;c++){
            
            permute(n-1,str,total, array);
            if (n % 2 == 0){
                char tmpstr=str[c];
                str[c]=str[n];
                str[n]=tmpstr; 
                }
            else{
                char tmpstr=str[0];
                str[0]=str[n];
                str[n]=tmpstr;
            }
        }
    }
}

int main() {
    int total = 0;
    string array[24];
    permute(3,"abcd",&total, array);
    cout << total << endl;
    return 0;
}

そして、これが出力です。13行目で繰り返す

24
abcd
bacd
cbad
bcad
cabd
acbd
dbca
bdca
cbda
bcda
cdba
dcba
abcd <-- right here
bacd
cbad
bcad
cabd
acbd
dbca
bdca
cbda
bcda
cdba
dcba

みんなありがとう、どんな助けも大歓迎です!

4

3 に答える 3

2

PaulMcKenzie が推奨する標準関数を使用することは常に優れたアイデアですが、なぜそれが機能しないのかについて質問のあるコードを投稿しました。

if (n%2 ==0)for ループで、行とその else 部分 を取り除きます。

  for(int c=0; c<=n;c++){
        permute(n-1,str,total, array);
        char tmpstr=str[c];
        str[c]=str[n];
        str[n]=tmpstr; 
        }

その後、動作するはずです。

于 2014-07-16T18:44:23.663 に答える