社区
C语言
帖子详情
一个简单的问题?
giantzz
2002-03-18 05:57:53
如何用递归实现n个元素所有的排列方式并打印出来?
...全文
46
9
打赏
收藏
一个简单的问题?
如何用递归实现n个元素所有的排列方式并打印出来?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangrk
2002-03-20
打赏
举报
回复
http://www.csdn.net/Expert/TopicView1.asp?id=562179
ygd
2002-03-20
打赏
举报
回复
#include <iostream.h>
#include <conio.h>
#define size 50
//////////////////////////////////////////
int array[size][size]; //全局变量,array用来表示所求矩阵.
int num=0; //所有拉丁方矩阵的个数
int flag=1; //打印标志位,为1则打印。
void swap(int &a,int &b); //交换a,b
void setArray(int n); //初始化二维数组
void perm(int *arr,int k,int m); //对数组arr,从下标k到m的元素全排列
//////////////////////////////////////////////
void swap(int &a,int &b)
{
int temp=a;a=b;b=temp;
}
//////////////////////////////////////////////
void perm(int *arr,int k,int n)
{
if(k>=n)
{
num++;
if(flag==1)
{
cout<<"press y to print , press n to continue."<<endl;
cout<<endl;
if (getch()=='n') flag=0;
}
if(flag==1)
{
cout<<"-----------------------------------------\n";
cout<<num<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<array[arr[i]-1][j]<<" ";
cout<<endl;
}
}
}
else for(int i=k;i<n;i++)
{
swap(arr[k],arr[i]);
perm(arr,k+1,n);
swap(arr[k],arr[i]);
}
}
////////////////////////////////////////////////
void setArray(int n)
{
int i,j;
for(i=0;i<n;i++)
{
array[0][i]=i+1;
}
for(i=1;i<n;i++)
{
for(j=0;j<n-1;j++)
array[i][j]=array[i-1][j+1];
array[i][n-1]=array[i][0]-1;
}
}
////////////////////////////////////////////////
void main()
{
int i,j,k;
//int array[size][size]
int arr[size];
cout<<"Input the size of array:";
int n;
cin>>n;
for(i=0;i<n;i++)
{
arr[i]=i+1;
}
setArray(n);
perm(arr,0,n);
cout<<"The total number of the array is "<<num<<endl;
getch();
}
iamknight
2002-03-20
打赏
举报
回复
就是,用递归解决,对效率就不可能有太高的要求了。
giantzz
2002-03-20
打赏
举报
回复
帮忙用c描述一下!!!
giantzz
2002-03-19
打赏
举报
回复
dd
neccui
2002-03-18
打赏
举报
回复
否则什么?
这个问题不可能高效的了。
giantzz
2002-03-18
打赏
举报
回复
请用C语言描述,要高效(否则...)
Cauty45
2002-03-18
打赏
举报
回复
void f(int a[], int flag[],int n)
{
if(n==1){
out a[i] where flag[i]==1;
return;
}
for(每一个flag[i]==1 的i){
copy flag[]==>flag1[];
flag1[i]=0;
f(a,flag1,n-1);
}
}
void main()
{
int a[]={1,2,3,4,5};
int flag[]={1,1,1,1,1};
f(a,flag,5);
}
Cauty45
2002-03-18
打赏
举报
回复
void f(int a[], int flag[],int n)
{
if(n==1){
out a[i] where flag[i]==1;
}
for(每一个flag[i]==1 的i){
copy flag[]==>flag1[];
flag1[i]=0;
f(a,flag1,n-1);
}
}
你必须知道的495个C语言
问题
1.24 我在
一个
文件中定义了
一个
extern数组,然后在另
一个
文件中使用,为什么sizeof取不到数组的大小? 声明
问题
1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...
Java
问题
宝典2012版
1、
一个
".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...
Web Application Stress Tool.rar
找出性能瓶颈所在是设计性能改善方案之前的
一个
至关紧要的步骤。 本文介绍Microsoft的Web Application Stress Tool(WAS,Web应用负载测试工具)在Web服务器性能测试中的应用(注:Stress基本含义为“重压;压力...
文本文件编码转换工具 gbk utf8 gb2312
原因,我决定学习PHP+MYSQL之后选择了用整合包的环境(因为我懒) 经过历时
一个
星期的比较 揣摩 测试之后选择了 VertrigoServ 可是它美中不足的是mysql里中文显示"????????".最后几经周折总算解决了. 方法如下: 1)在...
MES系统是什么?MES能为制造企业解决什么
问题
?
MES可以为企业提供包括生产数据管理、生产计划管理、库存管理、质量管理、生产过程控制、设备管理、人员绩效管理、报表统计分析等模块,为企业打造
一个
扎实、可靠、全面、可行的制造协同管理平台。 MES能为制造企业...
C语言
70,021
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章