计蒜客:农场看守(DFS、欧拉回路)

 输入样例:

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 }

 

posted on 2024-11-01 20:24  Coder何  阅读(34)  评论(0)    收藏  举报