-1

順列を教えるために教授のコードを理解しようとしていますが、if ステートメント内の "(!used[i])" が何を意味し、何をするのかわかりません。これが完全な関数です。if ステートメントは for ループ内にあります。誰がそれが何をするのか説明できますか?

void RecursivePermute(int n, int k, int* perm, int* used) {

 int i;

 // We've filled perm already. Print the corresponding permutation.
 if (k == n) {
    for (i=0; i<n; i++)
        printf("%d ", perm[i]);
    printf("\n");
 }

 // Try each unused number in spot k.
 for (i=0; i<n; i++) {
    if (!used[i]) {           //this if statement is my question
        perm[k] = i;
        used[i] = 1;
        RecursivePermute(n, k+1, perm, used);
        used[i] = 0;
    }
 }

}
4

3 に答える 3

3

それはnotを意味するので、要素が のifときにステートメントをトリガーするので、次のように書くこともできます:intused[i] == 0

if (used[i] == 0) {
    ...
}
于 2013-09-11T15:52:24.290 に答える
1

used整数の配列です。やっている

if (!used[i]) 

現在の要素が 0 かどうか調べます

再帰関数が行うことは、イニシアチブ k に応じて、配列を出力し、次の要素に 1 を入れるたびにperm(および出力) を次のようにすることです。

00000
01000
01200
01230

. . .

于 2013-09-11T15:52:23.340 に答える