Hierholzer(dfs逆后序遍历)

Hierholzer(dfs逆后序遍历)

475685 · 发布于 2025-06-24 · 浏览 463 回复 0

include<bits/stdc++.h>

using namespace std;

vector solve; vector visited(1030);

void dfs(vector<vector<pair<int, int>>>& graph, int x){

for(pair<int, int> p : graph[x]){	
	int nxt = p.first;
	int ed = p.second;
	if(!visited[ed]){	
		visited[ed]= true;
		dfs(graph, nxt);	

	}
}
solve.push_back(x);

}

bool cmp(pair<int, int> p1, pair<int, int> p2){

return p1.first < p2.first;

}

int main(){

int n;
cin >> n;
vector<vector<pair<int, int>>> graph(505);
int ed = 1;
while(n--){
	int x, y;
	cin >> x >> y;
	graph[x].push_back({y, ed});
	graph[y].push_back({x, ed}); 
	ed++;
}
int flag = 1;
int num;
for(int i = 0; i < graph.size(); i++){
	if(graph[i].size() % 2 == 1){
		flag = 0;
		num = i;
		break;
	}
}
for(vector<pair<int, int>>& nums : graph){
	sort(nums.begin(), nums.end(), cmp);
}

// cout << flag << num << endl; // cout << endl; // for(vector<pair<int, int>> nums : graph){ // for(pair<int, int> p : nums){ // cout << p.first << " " << p.second << endl; // } // } // cout << endl;

if(flag == 0){
	dfs(graph, num);
}
else dfs(graph, 1);
for(int i = solve.size() - 1; i >= 0; i--){
	cout << solve[i] << endl;
}

}

全部回复 共 0 条

还没有人回复。往下写第一条。

发表回复