实现1~n个数的全排列问题
思路:DFS
关键点:1.找好搜索顺序
设n=3.画出递归搜索树(深度优先搜索)
2.状态记录
st[N]:代表第N位数的值是多少。
used[N]:表示数1~N的数是否被选,若为true表示已被选,若为false表示未被选。
3.代码思路
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; const int N=10; int n;//在main外面定义dfs里面可以不带n int st[N];//记录状态,0表示未选,其他数表示第几位数是多少 bool used[N];//记录是否已选,true表示已被选,false未被选。默认值为false。 void dfs(int x) { //边界 if(x>n) { for(int i=1;i<=n;i++) { cout<<st[i]<<" "; } cout<<endl; return; } for(int i=1;i<=n;i++) { if(used[i]==false)//数i未被选 { st[x]=i; used[i]=true; //进入分支 dfs(x+1);//下一位数 //恢复现场 st[x]=0; used[i]=false; } } } int main() { cin>>n; dfs(1); return 0; }