在寒假集训中的某一节课中(划水太严重忘了哪一节)看到了穆学长做的程序,首先惊叹于学长的能力(YYDS!)其次对于展示的动图能够生动形象的展示出深度优先遍历和广度优先遍历的区别。
本文只浅谈BFS
类似于一条路走到最后的感觉(一根树上吊死)(不见南墙不回头)
但是遍历到最后能得到迷宫的所有结果
重点是对递归的理解相当于E - 爬楼梯 | SDUT OnlineJudge的高级版前路不通会在此路找到另一条走法,直到当前没有路才会返回到上一层
经典例题
1 #include <bits/stdc++.h> 2 #define endl '\n' 3 #define x first 4 #define y second 5 #define int long long 6 #define Tang ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); 7 8 using namespace std; 9 10 const int N=10; 11 const int INF=0x3f3f3f3f; 12 const int mod=1e9+7; 13 14 int n; 15 int q[N]; 16 int path[N]; 17 bool st[N]; 18 19 void dfs(int u) 20 { 21 22 if(u>n) 23 { 24 for(int i=1;i<n;i++) 25 cout << path[i] << ","; 26 cout << path[n] << endl; 27 return; 28 } 29 for(int i=1;i<=n;i++) 30 { 31 if(!st[i]) 32 { 33 path[u]=q[i]; 34 st[i]=true; 35 dfs(u+1); 36 path[u]=0; 37 st[i]=false; 38 } 39 } 40 41 } 42 43 void solve() 44 { 45 46 cin >> n; 47 for(int i=1;i<=n;i++) 48 cin >> q[i]; 49 dfs(1); 50 51 } 52 53 signed main() 54 { 55 Tang 56 int T=1; 57 //cin >> T; 58 while(T--) 59 solve(); 60 61 return 0; 62 63 }