浙大版《数据结构(第2版)》题目集-习题2.8 输出全排列 (20分)
程序员文章站
2022-06-10 19:20:25
...
参考代码:
#include<stdio.h>
int path[10]; //已经选了哪些数,数组从标号1开始
int used[10]={0}; //标记对应数是否选择,0未选择,1选择,数组从标号1开始
void perm(int n,int depth); //depth表示递归到了第几层
int main()
{
int n;
scanf("%d",&n);
perm(n,1);
return 0;
}
void perm(int n,int depth)
{
int i;
if(n==depth-1)
{
for(i=1;i<=n;i++)
{
printf("%d",path[i]);
}
printf("\n");
}
else
{
for(i=1;i<=n;i++)
{
if(used[i]==0)
{
path[depth]=i;
used[i]=1;
perm(n,depth+1);
used[i]=0;
}
}
}
}
思路:
该题采用的是回溯算法,对该题思路不太理解的可以参考LeetCode中讲解的视频:全排列回溯算法
上一篇: 浙大版《数据结构(第2版)》题目集 实例1.1 最大子列和问题 (20分)
下一篇: Ajax