在求解欧拉回路的问题中我们可以采用fleury算法。

然而在进行算法竞赛时,如果只是求欧拉回路我们可以采用DFS进行实现,需要注意的小细节时在输出边时需要在回溯阶段逆向输出因为遇到 1->2->3->2->1这种图会出现走死路情况
来看道例题:
UVA10054

#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int g[N][N];
int d[N];
int n;
void euler(int u) {
for(int v = 1; v <= 50; ++v){
if(g[u][v]) {
g[u][v]--;
g[v][u]--;
euler(v);
printf("%d %d
", v, u); //一定是逆序输出
}
}
}
int main () {
int T;
scanf("%d", &T);
for(int t = 1; t <= T; ++t) {
int u, v;
memset(g, 0, sizeof g);
memset(d, 0, sizeof d);
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
scanf("%d%d", &u, &v);
d[u]++;
d[v]++;
g[u][v]++;
g[v][u]++;
}
printf("Case #%d
", t);
bool is = 1;
for(int j = 1; j <= 50; ++j) {
if(d[j] % 2) {
is = 0;
break;
}
}
if(!is) {
// printf("some heads may be lost
");
printf("some beads may be lost
");
}
else {
for(int i = 1; i <= 50; ++i) {
euler(i);
}
}
if(t != T) {
printf("
");
}
}
}