2021.5.22
- 图分支算法 访问-遍历{DFS(深度优先遍历),BFS(广度优先遍历)}
#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
vector<int> e[maxn];
int bk[maxn]; // 某个点是否被访问
// 任务:输出所有可能的简单路径(不含环)
vector<int> way; // 记录当前的访问路径
void dfs(int u/*现在在哪个点*/)
{
bk[u] = 1; // 该点已经被访问过了
way.push_back(u);
bool ok = false;
for (auto v : e[u]){
if (bk[v] == 1) continue;
dfs(v);
ok = true;
}
// 无路可走
if (ok == false){
for (auto g : way)
cout << g << " ";
cout << endl;
}
bk[u] = 0; // 返回之前,将改点置为0
way.pop_back();
return ;
}
int main()
{
int n , m; cin >> n >> m;
for (int i = 1 ; i <= m ; i++){
int x , y; cin >> x >> y;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1);
return 0;
}