当前位置: 代码迷 >> C语言 >> 求解这题
  详细解决方案

求解这题

热度:159   发布时间:2008-04-22 14:19:13.0
求解这题
输入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楼写过一个类似的,你可以自己改改
----------------解决方案--------------------------------------------------------
懂一点点
----------------解决方案--------------------------------------------------------
  相关解决方案