这个算法怎么理解

Motoste 2007-11-21 03:23:56
//是个求全排列的算法,为什么要用交换(Swap),算法思路是什么,谁能详细解释下
#include<iostream>
using namespace std;

template<class T>
void Swap(T& a, T& b)
{
T temp=a;a=b;b=temp;
}

template<class T>
void Perm(T list[],int k,int m)
{
int i;
if(k==m)
for(i=0;i<=m;++i)
cout<<list[i]<<endl;
else
for(i=k;i<=m;++i){
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}

int main()
{
char list[3]={'a','b','c'};
Perm(list,0,2);
return 0;
}



...全文
140 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
stephen_xf 2007-12-18
  • 打赏
  • 举报
回复
这是数据结构算法与应用里的一道题,楼主可以去看看
主要就是前缀后缀的应用
取一个,排列,放进去
再取一个,排列,放进去……
ryfdizuo 2007-11-21
  • 打赏
  • 举报
回复
可以单步跟踪吗?调试啊;
如果你想搞清楚的话;就是太痛苦了啊,^_^_^_^
kesaihao862 2007-11-21
  • 打赏
  • 举报
回复
假设有x1,x2,x3,。。。xn

如果n=1,直接打印了。
如果n》1,
依次将xi交换到第一位,然后在求x2,。。xn。的全排列。然后在交换回来。
食人族哲学家 2007-11-21
  • 打赏
  • 举报
回复
全排列还要用递归,LZ,我建议楼主不看也罢.
如果你是要学习递归算法,换个简单的例子吧;
如果你是学习如何搞全排列,那么学个不用递归的吧;
总之,有很多东西要去学,递归懂了也就可以了,你在项目组写个递归程序,被赶出来的概率为99%(当然不会递归也不行)
递归在我看来只有2种情况用:1.新手学习有关(这个例子应尽量简单)2.在时间\精力\能力都找不到一个非递归算法时.
有时间学点别的吧,呵呵.
tdcr5 2007-11-21
  • 打赏
  • 举报
回复
不知道LZ对这三句是怎么理解的,
其实在循环体内经过这三句后,list序列本身并没有改变

例如:

Swap(list[k],list[i]); // 执行这句以前lsit序列是 a b c
Perm(list,k+1,m);
Swap(list[k],list[i]); //那么执行这句以后lsit序列还是 a b c

然后你在自己琢磨下每一次循环都做了什么

Motoste 2007-11-21
  • 打赏
  • 举报
回复
是递归,我也debug了,但就是
for(i=k;i <=m;++i){
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
还是想不明白,谁能将这个for循环解释的详细些?
lucian2007 2007-11-21
  • 打赏
  • 举报
回复
知道什么是全排列吧?
不交换(Swap)位置怎么输出全排列啊???
里面用到了递归的思想!!
gaufer 2007-11-21
  • 打赏
  • 举报
回复
用递归法求全排列,思路是这样的,例如求{abc}
那么我们可以看成先固定a,求{bc}的排列再加上固定b求{ac}的排列再加上固定c求{ab}的排列。
然后把他们的排列加起就是{abc}的排列。
pptor 2007-11-21
  • 打赏
  • 举报
回复
先看算法再看代码
飞哥 2007-11-21
  • 打赏
  • 举报
回复
我记得好像学算法的时候这个是第一课里面的,具体记不得了
sms88 2007-11-21
  • 打赏
  • 举报
回复
你没了解思想就看代码是有点头痛

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧