茅蒐Rubia 2019-10-08 15:14 采纳率: 0%
浏览 450

求助:一个简单(?)的作业题:用来生成n中取m无重复全排列。请用堆栈消除递归

这是个递归算法(perm函数)用来生成n中取m的排列(数字可以重复但排序不重复)。请用堆栈消除递归
#include
void perm(int flag[],int a[], int k, int n, int m)
{ int i;
if(k==m)
{ for(i=0;i<m;i++) printf("%d ",a[i]);
printf("\n");
return;
}
for(i=0;i<n;i++)
if(flag[i]==0)
{ a[k]=i+1;
flag[i]=1;
perm(flag,a,k+1,n,m);
flag[i]=0;
}
}
int main() {
const int n=3,m=2;
int flag[n],a[m],i;
for(i=0;i<n;i++) flag[i]=0;
perm(flag,a,0,n,m);
return 0;
}
如:n=3, m=2,则输出为:
1 2
1 3
2 1
2 3
3 1
3 2

  • 写回答

1条回答

  • threenewbee 2019-10-08 17:53
    关注

    https://ask.csdn.net/questions/755200 类似的问题,参考下
    主要就是改造参数、局部变量和返回地址的存储、初始化和恢复。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题