hdoj1878歐拉回路
阿新 • • 發佈:2019-01-01
Problem Description 歐拉回路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定一個圖,問是否存在歐拉回路?
Input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數N ( 1 < N < 1000 )和邊數M;隨後的M行對應M條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點的編號(節點從1到N編號)。當N為0時輸入結
束。
Output 每個測試用例的輸出佔一行,若歐拉回路存在則輸出1,否則輸出0。
Sample Input 3 3 1 2 1 3 2 3 3 2 1 2 2 3 0
Sample Output 1 0
尤拉圖的判斷方法:每個節點的度數為偶數度,且為連通圖.
程式碼如下:
#include<cstdio> #include<cstring> int du[1100],par[1100]; int find(int x) { if(par[x]==x) return x; else return par[x]=find(par[x]); } int unite(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) { par[fx]=fy; } } int main() { int n,m,i,u,v; while(scanf("%d",&n),n) { for(i=1;i<=n;i++) par[i]=i; scanf("%d",&m); memset(du,0,sizeof(du)); while(m--) { scanf("%d%d",&u,&v); unite(u,v); du[u]++; du[v]++; } for(i=1;i<=n;i++) { if(du[i]%2==1||find(i)!=par[1]) break; } if(i>n) printf("1\n"); else printf("0\n"); } }