搜索与图论
1.深度优先搜索DFS
1.排列数字
-
题目描述
-
思路:
-
回溯一定要注意恢复现场
-
代码
-
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; const int N = 10; int path[N]; //用来存取方案 bool st[N]; //用来存取每个数字的状态,表明数字是否被用过 int n ; void dfs(int u){ if(u == n){ //u = n时代表n个位置都已经被填满了 可以直接输出 for(int i = 0 ; i < n ; i++){ printf("%d ",path[i]); } puts(""); return ; } //如果u不等于n,就代表空位还没有被填满 for(int i = 1 ; i <= n ; i++){ if(!st[i]){ path[u] = i; st[i] = true ; //进入递归前 修改状态 dfs(u+1); //递归结束后 及时恢复原状态 st[i] = false ; } } } int main(){ cin >> n; dfs(0); }
-