日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SDUT-3364_欧拉回路

發布時間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDUT-3364_欧拉回路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據結構實驗之圖論八:歐拉回路

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

在哥尼斯堡的一個公園里,有七座橋將普雷格爾河中兩個島及島與河岸連接起來。

能否走過這樣的七座橋,并且每橋只走一次?瑞士數學家歐拉最終解決了這個問題并由此創立了拓撲學。歐拉通過對七橋問題的研究,不僅圓滿地回答了哥尼斯堡七橋問題,并證明了更為廣泛的有關一筆畫的三條結論,人們通常稱之為歐拉定理。對于一個連通圖,通常把從某結點出發一筆畫成所經過的路線叫做歐拉路。人們又通常把一筆畫成回到出發點的歐拉路叫做歐拉回路。具有歐拉回路的圖叫做歐拉圖。

你的任務是:對于給定的一組無向圖數據,判斷其是否成其為歐拉圖?

Input

連續T組數據輸入,每組數據第一行給出兩個正整數,分別表示結點數目N(1 < N <= 1000)和邊數M;隨后M行對應M條邊,每行給出兩個正整數,分別表示該邊連通的兩個結點的編號,結點從1~N編號。

Output

若為歐拉圖輸出1,否則輸出0。

Sample Input

1
6 10
1 2
2 3
3 1
4 5
5 6
6 4
1 4
1 6
3 4
3 6

Sample Output

1

Hint

如果無向圖連通并且所有結點的度都是偶數,則存在歐拉回路,否則不存在。

題解:已經給了歐拉回路的判定條件,判定一下圖是否連通,然后就可以判斷一下是不是歐拉回路就可以了。

#include <string.h> #include <stdio.h> #include <stdlib.h> #include <math.h>int n;/*n節點數量*/ int f[1050];/*記錄點是否被遍歷過*/ int INF = 1e9+7;/*相當于無窮大*/ int s[1050][1050]; int num[1050];/*記錄節點的度*/void DFS(int x) {f[x] = 1;int i;for(i=1;i<=n;i++){if(!f[i]&&s[x][i])DFS(i);} }int main() {int t;int m,i,j;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i=1;i<=n;i++)for(j=1;j<=n;j++)s[i][j] = 0;for(i=1;i<=n;i++)num[i] = f[i] = 0;for(i=0;i<m;i++)/*輸入邊的時候順便把端點的度記錄*/{int a,b;scanf("%d%d",&a,&b);s[a][b] = s[b][a] = 1;num[a] ++;num[b] ++;}for(i=1;i<=n;i++)/*判斷度是否都是偶數*/{if(num[i]%2)break;}if(i!=n+1)/*說明有點的度不是偶數,證明不是歐拉回路*/{printf("0\n");continue;}int ff = 0;for(i=1;i<=n;i++)/*判斷圖是否連通*/{if(!f[i])/*未標記說明是一顆新的樹(圖),對他進行DFS*/{ff ++;/*記錄樹(圖)的數量*/DFS(i);}}if(ff>1)/*樹(圖)的數量不唯一,說明圖不連通*/{printf("0\n");continue;}printf("1\n");}return 0; }

轉載于:https://www.cnblogs.com/luoxiaoyi/p/10067588.html

總結

以上是生活随笔為你收集整理的SDUT-3364_欧拉回路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。