e9ly 发布留言 2008-7-29 13:55
新人求救,一个程序搞不定!
#define LENGTH 4
#include
main()
{
char source[LENGTH];
int counter;
void Permute(char[],int,int);
for(counter=0;counter source[counter]='a'+counter;
}
PERmute(source,LENGTH,0);
}
void Permute(char source[],int length,int front)
{
char buffer[LENGTH];
int counter;
int number;
int index;
if(front==length-1){
printf("\n");
for(counter=0;counter printf("%4c",source[counter]);
}
}
else{
for(number=front;number for(counter=0;counter buffer[counter]=source[counter];
}
buffer[front]=source[number];
index=front+1;
for(counter=front;counter if(counter!=number){
buffer=source[counter];
}
}
Permute(buffer,length,front+1);
}
}
}
在TC2.0环境下出现了这样的错误: inker error: undefined symbol '_PERmute' in moldule QPAILIE.C
什么意思啊? PERMUTE是排列的意思,难道说我的TC2.0缺少东西?永夜的极光 发布留言 2008-7-29 14:06
因为C语言严格区分大小写
你的函数定义是Permute,调用的时候却是PERmute
编译器认为这两个名字是不同的e9ly 发布留言 2008-7-29 14:18
很感谢,能否帮我解释下else{
for(number=front;number for(counter=0;counter buffer[counter]=source[counter];
}
buffer[front]=source[number];
index=front+1;
for(counter=front;counter if(counter!=number){
buffer=source[counter];
}
}
Permute(buffer,length,front+1);
}
}
这段。主要index=front+1;之后很迷茫StarWing83 发布留言 2008-7-29 14:26
首先你要明白,这个排列是怎么产生的。通过不断替换掉front地方的字符,来产生排列。比如123
front=0的时候,第1个位置分别取1,2,3,然后递归调用Permute函数,对后面的字符产生排列。
比如front=0,循环的第一次,counter=0的时候,第一个位置选了1,将“23”交给Permute递归去产生排列,最终产生123,132。
然后counter=1,第一个位置选了2,将“13”交给Permute,产生了213,231。
等等
解释了原理,代码应该很容易看懂了吧?
顺便提醒你,这样好浪费的。原地进行替换会快很多。e9ly 发布留言 2008-7-29 14:53
太感谢了,我认你做师傅吧。我是初学者,但我很感兴趣。
页: [1]