順列を教えるために教授のコードを理解しようとしていますが、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;
}
}
}