永发信息网

全排列递归算法

答案:2  悬赏:60  手机版
解决时间 2021-02-13 13:39
全排列递归算法
最佳答案
希望我的答复可以帮助你加深理解:

第一,perm函数中的条件for(int i=k;i<=m;i++)应更正为 for(int i=k;i
第二,你可以在核心步骤的前后打印有关变量的值,分析查看每一步的具体执行情况,这是编程调试的重要能力,要加强。
第三,以下是我提供的附件程序及运行结果(以1,2,3这个数组的全排列),可辅助分析:

1. 程序源码=================================================
#include
#include
int N,P=0;

void swap(int a[],int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}

void perm(int a[],int k,int m,int pk,int pm)
{
int i;

if(k==m)
{
printf("----->perm %d :\n",P/N+1);
for(i=pk;i {
printf("%d ",a[i]);
P=P+1;
}
printf("\n\n");
}
else
{
for(i=k;i {
printf("a %d,%d,%d,%d,%d\n",i,k,a[0],a[1],a[2]);
swap(a,k,i);
printf("b %d,%d,%d,%d,%d\n",i,k,a[0],a[1],a[2]);
perm(a,k+1,m,pk,pm);
printf("c %d,%d,%d,%d,%d\n",i,k,a[0],a[1],a[2]);
swap(a,k,i);
printf("d %d,%d,%d,%d,%d\n",i,k,a[0],a[1],a[2]);
}
}
}

int main()
{

N=3;
int t[]={1,2,3};


perm(t,0,N,0,N);
printf("----->Over!\n");
system("pause");
return 0;
}

2.打印结果 ============================================================

a 0,0,1,2,3
b 0,0,1,2,3
a 1,1,1,2,3
b 1,1,1,2,3
a 2,2,1,2,3
b 2,2,1,2,3
----->perm 1 :
1 2 3

c 2,2,1,2,3
d 2,2,1,2,3
c 1,1,1,2,3
d 1,1,1,2,3
a 2,1,1,2,3
b 2,1,1,3,2
a 2,2,1,3,2
b 2,2,1,3,2
----->perm 2 :
1 3 2

c 2,2,1,3,2
d 2,2,1,3,2
c 2,1,1,3,2
d 2,1,1,2,3
c 0,0,1,2,3
d 0,0,1,2,3
a 1,0,1,2,3
b 1,0,2,1,3
a 1,1,2,1,3
b 1,1,2,1,3
a 2,2,2,1,3
b 2,2,2,1,3
----->perm 3 :
2 1 3

c 2,2,2,1,3
d 2,2,2,1,3
c 1,1,2,1,3
d 1,1,2,1,3
a 2,1,2,1,3
b 2,1,2,3,1
a 2,2,2,3,1
b 2,2,2,3,1
----->perm 4 :
2 3 1

c 2,2,2,3,1
d 2,2,2,3,1
c 2,1,2,3,1
d 2,1,2,1,3
c 1,0,2,1,3
d 1,0,1,2,3
a 2,0,1,2,3
b 2,0,3,2,1
a 1,1,3,2,1
b 1,1,3,2,1
a 2,2,3,2,1
b 2,2,3,2,1
----->perm 5 :
3 2 1

c 2,2,3,2,1
d 2,2,3,2,1
c 1,1,3,2,1
d 1,1,3,2,1
a 2,1,3,2,1
b 2,1,3,1,2
a 2,2,3,1,2
b 2,2,3,1,2
----->perm 6 :
3 1 2

c 2,2,3,1,2
d 2,2,3,1,2
c 2,1,3,1,2
d 2,1,3,2,1
c 2,0,3,2,1
d 2,0,1,2,3
----->Over!
请按任意键继续. . .追问m初始化为参与排列元素的起始坐标和终止坐标,那到底是起始坐标还是终止坐标?追答

此算法里(指我附上的完整代码),m和pm以及pk都是常量,是约束数组下边界和上边界的常量,运行中值不变的,pk是下边界值,此算法里,恒为0,m和pm是上边界,恒为数组元素的个数——1、2、3这3个数求排列的情形,pk=0,m=pm=3,程序运行中它们的值一直如此。


并且m和pm是同一个参数,是重复的,分析如此,并且我已经测试过了。以下是我的分析截图,看后,应该会再次加深你对此算法的理解。多思考多分析,定有进步。祝进步!祝愉快!






追问谢谢,谢谢~回答得很细哈~万分感谢,定当努力!

全部回答
人提货人带推广你今天进入
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
樟塘镇下湖村老年体育协会怎么去啊,我要去那
为什么是八鹤同春而不是别的数字呢
在 100mL 0.5mol/L 的AlCl3溶液中加入100mLNa
官浔镇溪坂村老年人协会地址好找么,我有些事
大四路/商贸西路(路口)在什么地方啊,我要过
如何使用支付宝账号来登录来分期
十一选五胆拖可以赚到钱吗?求大神回复下
平和县老年人体育协会地址在哪,我要去那里办
下列消化液中,不含消化酶的是:CA. 唾液B.
尘埃3免cd 破解补丁
怎么让记者知道事情。让记者传播新闻。。。怎
家电维修中心地址在哪,我要去那里办事
清洁生产预工作审核重点是什么
常山华侨经济开发区老年人体育协会地址在哪,
竞价推广展现高 点击低,要怎么办
推荐资讯
沙县一中提前批录取线
中江县南华镇龙华社区幼儿园地址在什么地方,
清华同方禁止bios开机联网
消毒柜里的霉味怎么去掉
欧尚超市海曙店地址在什么地方,想过去办事
珍爱鲜花(嘉兴3店)地址在哪,我要去那里办事
电脑配置低网速没问题在线看电影会卡吗??
辐射3 望海崖
玉女丰胸茶有效果吗
温州鼓词哪里有下载的?拜托了各位 谢谢
改了QQ个性签名后,动态栏里有浏览记录,浏览
棉织物 21x19.5x276x268x30x137
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?