社区
C语言
帖子详情
一个简单的问题?
giantzz
2002-03-18 05:57:53
如何用递归实现n个元素所有的排列方式并打印出来?
...全文
70
9
打赏
收藏
一个简单的问题?
如何用递归实现n个元素所有的排列方式并打印出来?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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);
}
}
一个
简单
的背包
问题
本文介绍了
一个
简单
的0-1背包
问题
的递归解决方案。通过定义物品的重量数组和背包容量,利用递归函数来判断是否能恰好填满背包,并在可行的情况下输出装载的物品。此方法适用于小规模
问题
。
一个
简单
又不
简单
的
问题
——什么是富有实践经验的技术人员
本文探讨了
一个
看似
简单
的编程
问题
,通过解答该
问题
,揭示了经验对于技术人员成长的重要性。文章通过实例说明,即使是
简单
的代码错误,也能反映出缺乏实践经验的
问题
,并强调了在实践中积累经验的价值。
工作遇到
一个
简单
问题
的思考
本文通过
一个
实际案例,展示了如何排查和解决由于地址计算错误导致的栈内存重复分配
问题
,强调了即使
简单
的代码也可能隐藏着难以察觉的
问题
。
一个
简单
的
问题
在
一个
使用Window作为执行机的服务流水线中,由于多个服务同时运行导致磁盘空间不足,进而引发了一系列
问题
。该文详细记录了
问题
的发现过程及部分原因分析。
一个
很
简单
的数学
问题
本文通过
一个
关于鸡买卖的故事,展示了如何通过
简单
的数学运算来计算最终的利润。故事中的主角通过多次买卖一只鸡,最终实现了利润的积累。文章不仅提供了具体的计算过程,还展示了
一个
简单
的Java程序,用于模拟这一过程。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章