有两个函数,一个在数组中交换整数,另一个递归获得没有信誉的所有排列。但它为所有排列打印0,1。 l为0,r为(数组-1的大小)。
对于置换,数组a的输入为{0,1,1}。
void swap(int a[], int first, int second, int r)
{
if (second > r)
{
int tempp = a[first];
a[first] = a[second];
a[second] = tempp;
}
}
void permute(int a[], int l, int r)
{
int i;
if (l == r){
for (int i = 0; i < l; i++)
{
printf("%d",a[i]);
if (i == (r - 1))
{
printf("\n");
}
}
}
else
{
for (i = l; i <= r; i++)
{
swap(a,l, i,r);
permute(a, l+1, r);
swap(a,l, i,r);
}
}
}
答案 0 :(得分:0)
由于second > r
中第二个swap()
语句中的条件,for
中的条件permute()
始终为false。
删除有害状况并根据需要添加范围检查。
void swap(int a[], int first, int second, int r)
{
if (0 <= first && first <= r && 0 <= second && second <= r) /* range check */
{
int tempp = a[first];
a[first] = a[second];
a[second] = tempp;
}
}
将for (int i = 0; i < l; i++)
更改为for (int i = 0; i <= l; i++)
如果要打印数组中的所有元素而不是省略最后一个元素,请将if (i == (r - 1))
更改为if (i == l)
。