问题描述
输入和输出:
代码如下:
#include<string>
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
//这道题算是dfs的入门,首先对于输入的一个值 然后判断输入的这个值是第几位,如果是第n位的话,就直接输出
//如果不是的话,就把这一位的flag设置为访问过了,然后for循环第一个没有被访问过的值,加入之后,再起递归下一位
int n;
bool judge[100]={false};
int ans[100];//这个是输入结果
void prin(){
for(int i=1;i<=n-1;i++)
printf("%d ",ans[i]);
printf("%d",ans[n]);
printf("\n");
}
void dfs(int x){
if(x>n)
//就开始输入了
prin();
else{
//如果没到的话,就开始判断,找到第一个没有被访问过的数
for(int i=1;i<=n;i++)
if(!judge[i]){
//如果没有被访问过的话,就把这个值加入到ans中,并把他设置成访问过了,再继续递归,递归结束进行还原
ans[x]=i;
judge[i]=true;
dfs(x+1);
judge[i]=false;
}
}
}
int main(){
//输入数据,进行递归
scanf("%d",&n);
dfs(1);
}