之前写过一个运用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;
}