計蒜客:農場看守(DFS、尤拉回路)

Coder何發表於2024-11-01

輸入樣例:

4 5
1 2
1 4
2 3
2 4
3 4

輸出樣例:

1
2
3
4
2
1
4
3
2
4
1

直接對邊訪問陣列進行維護的同時,一次dfs就能走完兩遍。

沒想明白為啥尤拉回路可以這樣做。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n, m;
 4 vector<pair<int,bool>> graph[10005];
 5 void dfs(int p) {
 6     for (int i = 0; i < graph[p].size(); ++ i) {
 7         if (!graph[p][i].second){
 8             graph[p][i].second = true;
 9             dfs(graph[p][i].first);
10         }
11     }
12     cout << p << endl;
13 }
14 int main() {
15     cin >> n >> m;
16     while(m --) {
17         int s, e;
18         cin >> s >> e;
19         graph[s].push_back(make_pair(e,false));
20         graph[e].push_back(make_pair(s,false));
21     }
22     dfs(1);
23 }

相關文章