-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 ,所以会在element的时候触发if语句,所以也可以写成:intused[i] == 0

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

used是一个整数数组。正在做

if (!used[i]) 

检查当前元素是否为 0

递归函数所做的是每次打印数组然后将 1 放入下一个元素中,导致perm(和输出)看起来像,具体取决于倡议 k:

00000
01000
01200
01230

. . .

于 2013-09-11T15:52:23.340 回答
1

如果变量为 0,则真值语句将其视为 false,否则将其视为 true。!是非运算符。因此 !used[i] 将做相反的事情,如果 used[i] 为零则返回 true,否则返回 false。

于 2013-09-11T15:53:25.753 回答