请用c++代码实现欧拉回路
时间: 2024-05-07 12:22:45 浏览: 134
欧拉回路是指一条路径可以恰好经过每个边一次,且起点和终点重合的情况。下面是用C++语言实现欧拉回路的代码:
```c++
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
int G[MAXN][MAXN];
int deg[MAXN];
int n, m;
void dfs(int u) {
for (int i = 1; i <= n; i++) {
if (G[u][i]) {
G[u][i]--, G[i][u]--;
dfs(i);
}
}
printf("%d ", u); // 输出欧拉回路
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++) {
int u, v;
scanf("%d%d", &u, &v);
G[u][v]++, G[v][u]++;
deg[u]++, deg[v]++;
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (deg[i] % 2 != 0) { // 判断是否存在欧拉回路
printf("No euler path!\n");
return 0;
}
cnt += deg[i];
}
cnt /= 2;
dfs(1);
printf("\n");
return 0;
}
```
其中,输入的第一行有两个整数n和m,分别表示图中的点数和边数。
接下来m行,每行两个整数u和v,表示存在一条从点u到点v的无向边。
在主函数中,首先判断是否存在欧拉回路,判断条件为每个点的度数都为偶数。如果不存在欧拉回路,则输出"No euler path!"。否则,从任意一个点开始遍历,输出欧拉回路。
这里使用矩阵G来表示图的邻接矩阵,deg数组表示每个点的度数。在dfs函数中,首先遍历所有与当前点相邻的点,然后将当前边删除,继续递归搜索。最终输出欧拉回路。
阅读全文