关于本蒟蒻初学BFS

在寒假集训中的某一节课中(划水太严重忘了哪一节)看到了穆学长做的程序,首先惊叹于学长的能力(YYDS!)其次对于展示的动图能够生动形象的展示出深度优先遍历广度优先遍历的区别。

本文只浅谈BFS

类似于一条路走到最后的感觉(一根树上吊死)(不见南墙不回头)

但是遍历到最后能得到迷宫的所有结果

重点是对递归的理解相当于E - 爬楼梯 | SDUT OnlineJudge的高级版前路不通会在此路找到另一条走法,直到当前没有路才会返回到上一层

经典例题

关于本蒟蒻初学BFS

 

 

 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 }

 

上一篇:C和C++里的qsort&sort快排函数


下一篇:antd form表单自定义验证