初学者请教一下:有关排列组合的问题
我在网上找到一个排列组合的算法,有些不明白的地方想请教一下。算法如下:
从n个元素中同时取r个元素的排列,记做P(n,r)。(当r=n时,我们称P(n,n)=n!为全排列)例如我们有集合OR = {1,2,3,4},那么n = |OR| = 4,切规定r=3,那么P(4,3)就是:
{1,2,3}; {1,2,4}; {1,3,2}; {1,3,4};{1,4,2};{1,4,3};{2,1,3};{2,1,4}; {2,3,1}; {2,3,4}; {2,4,1}; {2,4,3}; {3,1,2}; {3,1,4}; {3,2,1}; {3,2,4}; {3,4,1}; {3,4,2}; {4,1,2}; {4,1,3}; {4,2,1}; {4,2,3}; {4,3,1}; {4,3,2}
算法如下:
int n, r;
char used[MaxN];
int p[MaxN];
void permute(int pos)
{ int i;
/*如果已是第r个元素了,则可打印r个元素的排列 */
if (pos==r) {
for (i=0; i cout << (p[i]+1);
cout << endl;
return;
}
for (i=0; i if (!used[i]) { /*如果第i个元素未用过*/
used[i]++; /*使用第i个元素,作上已用标记,目的是使以后该元素不可用*/
p[pos] = i; /*保存当前搜索到的第i个元素*/
permute(pos+1); /*递归搜索*/
used[i]--; /*恢复递归前的值,目的是使以后改元素可用*/
}
}
我想问一下:算法一开始定义used[]为字符型,那used[i]++该怎么解释啊
问题点数:10、回复次数:4Top
1 楼junguo(junguo)回复于 2005-04-03 17:19:10 得分 3
字符型的加法,其实和数字型的也一样。
因为Ascii码其实也是按数字表示的:如a,b,c,d等都是用数字表示的,a++后就等于b。Top
2 楼zjhzylp()回复于 2005-04-04 07:54:31 得分 0
那(!used[i]) 该怎么解释啊Top
3 楼pcboyxhy(-273.15℃)回复于 2005-04-04 08:23:05 得分 7
used[i]++; //这里可以改为 used[i]=1;
used[i]--; //这里可以改为 used[i]=0;Top
4 楼pcboyxhy(-273.15℃)回复于 2005-04-04 08:24:07 得分 0
if(!used[i]) //如果i没有标记为用过的,就可以用iTop




