简单的欧拉回路,如题。
欧拉回路的判断:
1.在有向图中:首先必要的条件是图连通,所以顶点的入度都等于出度。
2.在无向图中:首要条件还是图连通,其次就是所以顶点都是偶数度(该顶点的度为偶数)
这一题是无向图,所以根据判断方法来写,很简单,判定就不证明了。
我是用并查集来判断图是否连通的。
下面是AC的代码:
#include <iostream> #include <cstring> using namespace std; int par[1005], degree[1005]; int finds(int x) { if(x == par[x]) return x; else return par[x] = finds(par[x]); } int main() { int a, b, n, m, i; while(cin >> n) { if(n == 0) break; for(i = 0; i <= n; i++) par[i] = i; memset(degree, 0, sizeof(degree)); cin >> m; for(i = 0; i < m; i++) { cin >> a >> b; degree[a]++; //该点度+1 degree[b]++; int x = finds(a); int y = finds(b); if(x != y) //合并 par[x] = y; } int flag = 0, tag = 0; for(i = 1; i <= n; i++) //判是否连通 if(par[i] == i) flag++; if(flag > 1) cout << 0 << endl; else { for(i = 1; i <= n; i++) //判顶点的度是否为偶数 { if(degree[i] % 2) tag++; } if(tag > 0) cout << 0 << endl; else cout << 1 << endl; } } return 0; }
时间: 2024-09-28 00:37:12