青藤oj #10049. 全排列问题
题目描述
输出自然数 1 到n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
n(1≤n<9)
输出格式
由 1~n 组成的所有不重复的数字序列,每行一个序列。注意,每个数前面输出4个空格,包括第一个数。
思路
用递归每一个数都试一遍,如果没用过就标记为1,如果用过就下一个;
用s存下每一深度记下的数,当深度大于位数时,输出s;
return,从上一步继续往下推;
代码
#include<bits/stdc++.h>
using namespace std;
int a[1000]={
0},s[1000];
int n;
void dfs(int deep)
{
if(deep==n+1)
{
for(int i=1;i<=n;i++)
cout<<" "<<s[i];
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(a[i]==1)
continue;
a[i]=1;
s[deep]=i;
dfs(deep+1);
a[i]=0;
}
return;
}
int main()
{