這個代碼實現了找到小的歐拉迴路並將它們串聯起來從而形成整個圖的歐拉迴路的過程。沒有想明白為什麼是正確的……我想那個迴圈是個關鍵點。
//讀入一個無向圖 進行歐拉迴路判定 如果是 輸出迴路#include <stdio.h>#define MAXN 10010int bl[MAXN][MAXN],match[MAXN],path[MAXN*2];int tot,n,m,x,y;bool can[MAXN][MAXN];bool check_map() { for (int i = 1;i <= n;++i) if (match[i] & 1) return 0; return 1;}void find_path(int x) { if (!match[x]) { path[++tot] = x; return; } for (int i = 1;i <= bl[x][0];++i) { int k = bl[x][i]; if ((!match[k]) || (!can[x][k])) continue; --match[x]; --match[k]; can[x][k] = can[k][x] = 0; find_path(k); } path[++tot] = x;}int main() { freopen("sample.in","r",stdin); freopen("sample.out","w",stdout); scanf("%d%d",&n,&m); for (int i = 1;i <= m;++i) { scanf("%d%d",&x,&y); bl[x][++bl[x][0]] = y; bl[y][++bl[y][0]] = x; ++match[x]; ++match[y]; can[x][y] = can[y][x] = 1; } if (!check_map()) { printf("ERROR!\n"); return 0; } find_path(1); for (int i = 1;i < tot;++i) printf("%d---->",path[i]); printf("%d\n",path[tot]); return 0;}