之前写过一个运用DFS实现全排列的博客,大家可以去看看,进行一下对比,看看思想有什么不同;
如果看不懂请去阅读dfs版全排列
递归算法:
#include <stdio.h>
#include <string.h>
void quan(int n,int a[],int cur)//cur表示当前数组的元素总数,
{
if(cur==n+1)//一次排列完成,输出
{
for(int i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
}
else//数组内元素不足,继续填充
{
for(int i=1;i<=n;i++)
{
int ok=1;
for(int j=1;j<=cur;j++)//看元素是否重复
{
if(a[j]==i)
ok=0;
}
if(ok)//不重复,填充
{
a[cur]=i;
quan(n,a,cur+1);
}
}
}
}
int main()
{
int a[1005];
int n;
scanf("%d",&n);
quan(n,a,1);
return 0;
}
本文介绍了一种使用递归实现全排列的算法,并通过C语言进行了具体实现。该算法通过不断填充数组并检查元素是否重复来生成所有可能的排列组合。
1525

被折叠的 条评论
为什么被折叠?



