求解这题
输入n (0<n<9)值输出1.....n的字典排序
例如:
输入:3
输出:1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
我不知道如何运用递归求解~
----------------解决方案--------------------------------------------------------
自己补全吧...
void Perm(list[],int k,int m) //k表示前缀的位置,m是要排列的数目.{
if(k==m-1) //前缀是最后一个位置,此时打印排列数.
{
for(int i=0;i<m;i++)
{
printf("%d",list[i]);
}
printf("\n");
}
else
{
for(int i=k;i<m;i++)
{
Swap(list[k],list[i]); //交换前缀,使之产生下一个前缀.
Perm(list,k+1,m);
Swap(list[k],list[i]); //将前缀换回来,继续做上一个的前缀排列.
}
}
}
inline void Swap(int &a,int &b) //此处为引用,交换函数.函数调用多,故定义为内联函数.
{
int temp=a,a=b,b=temp;
}
----------------解决方案--------------------------------------------------------
好像有问题啊
就是按照这个程序运行n=3
显示的是
123
132
213
231
321
312
最后两行不复合字典排序~
但是还是谢谢
----------------解决方案--------------------------------------------------------
你想用递归..如果不加控制的话...想输出字典排序基本不可能...
----------------解决方案--------------------------------------------------------
.........
那意思是说如果不用递归就可以的吗?
如何做?
----------------解决方案--------------------------------------------------------
http://bbs.bccn.net/thread-209474-1-8
第5楼写过一个类似的,你可以自己改改
----------------解决方案--------------------------------------------------------
懂一点点
----------------解决方案--------------------------------------------------------