笔记 欧拉路
偶数度数 --> 欧拉回路
两个奇数度数 --> 普通欧拉回路
利用栈的性质处理一点多环的情况。
注意一定是在回溯时入栈。
在外部逆序输出栈内元素即可。
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1234, M = 5678;
int head[N], ver[M<<1], nex[M<<1], vis[M<<1], tot;
inline void addedge(int u, int v) {
ver[tot] = v; nex[tot] = head[u]; head[u] = tot++;
}
int sta[N*M], top;
void dfsE(int cur) {
for(int i = head[cur]; ~i; i = nex[i])
if(!vis[i]) {
vis[i] = vis[i^1] = 1;
dfsE(ver[i]);
sta[top++] = ver[i];
}
}
int main() {
memset(head, -1, sizeof(head));
int n, m, u, v;
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; ++i) {
scanf("%d %d", &u, &v);
addedge(u, v);
addedge(v, u);
}
dfsE(1);
while(top) {
printf("%d ", sta[--top]);
}
printf("1\n");
return 0;
}