题目描述:
给出一个n, 请输出n的所有全排列
输入描述
读入仅一个整数n (1<=n<=10)
输出描述
一共n!行,每行n个用空格隔开的数,表示n的一个全排列。并且按全排列的字典序输出。
样例输入
3
样例输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
题目分析:因为我是蒟蒻啊。只好用这样简单的一个dfs开始了。以后不断更新codevs等题库的题解吧。。
首先题目并不难。完全而且n小于等于10.可以枚举。但是更好的是搜索啊(搜索模板题啊
上代码。
#include<cstdio>
int n,a[20],b[20];
void dfs(int step)
{
if(step>n&&!b[step])
{
printf("%d",a[1]);
for(int i=2;i<=n;i++)
{
printf(" %d",a[i]);
}
printf("\n");return;
}
for(int i=1;i<=n;i++)
{
if(!b[i]) //这个注意判断。不要漏掉。第一次时漏掉纳闷了一会
{b[i]=1;
a[step]=i;
dfs(step+1);
b[i]=0;}
}
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}
#include<cstdio>
int n,a[20],b[20];
void dfs(int step)
{
if(step>n&&!b[step])
{
printf("%d",a[1]);
for(int i=2;i<=n;i++)
{
printf(" %d",a[i]);
}
printf("\n");return;
}
for(int i=1;i<=n;i++)
{
if(!b[i]) //这个注意判断。不要漏掉。第一次时漏掉纳闷了一会
{b[i]=1;
a[step]=i;
dfs(step+1);
b[i]=0;}
}
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}