永发信息网

全排列问题

答案:2  悬赏:10  手机版
解决时间 2021-11-21 04:33
全排列问题
最佳答案
这个代码有问题,修改一下
void perm(int list[], int k, int m)
{
int i;

if (k==m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf("\n");
n++;
}
else
{
for(i=k; i<=m;i++)
{
swap(&list[k], &list[i]);
perm(list,k+1,m);
swap(&list[k], &list[i]);
}
}
}
这样才能求出非3位数组的全排列

思路:假设N个数的全排列是perm(list, 1, N),即从第1个开始到第N个数的全排列,那么它的解可以划分为子问题:当第一位确定是某个数的时候,其余数的全排列。
假设第一位确定是数组中第i个数的时候,将数组第1个数与第i个数交换位置,则需求perm(list', 2, N),即调整位置后的数组第2个至第N个的全排列。
逐渐划分子问题,到数组最后一个数时,它的全排列就是它本身,递归到底,这样就可以将前方排列好的输出了

程序swap(int *a, int *b)交换两个数字不解释,perm(int list[], int k, int m)将数组list从k位到m位进行全排列。首先确定首位是数组中的哪个数字,将其换至第一位,然后递归求交换过的数组剩下的数字的全排列,递归完成再把那两个数换回来,再用另一个数字当作首位,以此类推追问for(i=k; i<=m;i++)
{
swap(&list[k], &list[i]);
perm(list,k+1,m);
swap(&list[k], &list[i]);在循环中 k的值和 i 的值 始终是相等的交换没有意思?追答i=k这是初始化,之后每次循环i加1,k值不变
第一次的时候,i=k交换是没有什么意义,不过为了代码简洁一些,这样写比较方便追问但是调用的函数本身 perm(list,k+1,m); 这样不就让K值也跟着加1了么追答拜托,k+1是传给perm的值,k本身又不加1
k=k+1才是k加1,没有赋值的时候k值是不会变化的追问可以加你QQ么? 我在QQ里问你追答我感觉你好象对于C语言的语法都不太熟悉,所以建议你先看看语法,搞明白每一句在说什么,然后再研究算法的事情。就跟学英语一样,单词还不会就学写论文,这难了点
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
几米蜜码-新生态咖啡馆地址在什么地方,我要
URLError: <urlopen error [Errno 101] Netwo
38座的客车全险大约多少钱
米sim可以打电话吗
辛伐他丁与普伐他汀哪个副作用更大
怎么面对课堂上的人
15X3.0真空胎和163.0真空胎可以互换吗
铭艺画廊地址在哪,我要去那里办事,
今年驾驶证有没有新规
深圳沙井沙一村交通银行在哪里
remember地址在什么地方,想过去办事,
女情人提分手男情人回了呵呵好的是什么意思
伊贝诗积分怎么兑换?
形容马上立刻的词都有哪些?
的车啊,怎么提车那么慢,都快急死了
推荐资讯
一个关于蘑菇的笑话
28mm厚的20钢板的焊缝进行射线探伤,能穿透吗
66°32′35″属于地理领域问题,是什么意思?
世界上是否真有特异功能?
昆明西山区有没有4S店招销售顾问啊。我原来在
国四标准的车在北京可以过户吗
为什么说文化安全在国民安全中处于保障地位
外伤后遗症会导致有时对别人说胡话正常吗?
甜麻辣的鸭架吃过小肚子就难受什么情况
中高考 作。。。弊犯什么法。。。
聚家画室地址有知道的么?有点事想过去!
求Zion.T《杨花大桥》音译歌词,要中文音译
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?