luogu 1706 全排列问题
dfs的简单问题,一个dfs函数一般情况应该输出一个结果
#include<bits/stdc++.h> using namespace std; int n; bool vis[20];//i是否访问过 int a[20]; void pr(){ for(int i=1;i<=n;i++) cout<<setw(5)<<a[i];//setw输出固定数量的空格 cout<<endl; } void dfs(int x)//x是层数 {//一次输出一组数 ,也是dfs的特点 if(x>n){//输出 pr(); } for(int i=1;i<=n;i++){ if(!vis[i]){ a[x]=i; vis[i]=1; dfs(x+1);//进入下一层 vis[i]=0;//防止退回后,同一层的不同情况发生干扰 //这一步将发生在pr之后,哪怕进入了别的函数,但此刻的i还没变 } } } int main(){ cin>>n; dfs(1); return 0; }