PTA:7-1 哥尼斯堡的“七桥问题” (25 分)
生活随笔
收集整理的這篇文章主要介紹了
PTA:7-1 哥尼斯堡的“七桥问题” (25 分)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、題目
哥尼斯堡是位于普累格河上的一座城市,它包含兩個島嶼及連接它們的七座橋,如下圖所示??煞褡哌^這樣的七座橋,而且每橋只走過一次?瑞士數(shù)學(xué)家歐拉(Leonhard Euler,1707—1783)最終解決了這個問題,并由此創(chuàng)立了拓?fù)鋵W(xué)。這個問題如今可以描述為判斷歐拉回路是否存在的問題。歐拉回路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點(diǎn)的一條回路。現(xiàn)給定一個無向圖,問是否存在歐拉回路?輸入格式: 輸入第一行給出兩個正整數(shù),分別是節(jié)點(diǎn)數(shù)N (1≤N≤1000)和邊數(shù)M;隨后的M行對應(yīng)M條邊,每行給出一對正整數(shù),分別是該條邊直接連通的兩個節(jié)點(diǎn)的編號(節(jié)點(diǎn)從1到N編號)。輸出格式: 若歐拉回路存在則輸出1,否則輸出0。輸入樣例1: 6 10 1 2 2 3 3 1 4 5 5 6 6 4 1 4 1 6 3 4 3 6 輸出樣例1: 1 輸入樣例2: 5 8 1 2 1 3 2 3 2 4 2 5 5 3 5 4 3 4 輸出樣例2: 0二、相關(guān)知識
1.考察歐拉回路問題 歐拉回路:圖G,若存在一條路,經(jīng)過G中每條邊有且僅有一次,稱這條路為歐拉路, 如果存在一條回路經(jīng)過G每條邊有且僅有一次有向圖:圖連通,有一個頂點(diǎn)出度大入度1,有一個頂點(diǎn)入度大出度1,其余都是出度=入度。 無向圖:圖連通,只有兩個頂點(diǎn)是奇數(shù)度,其余都是偶數(shù)度的。判斷歐拉回路是否存在的方法 有向圖:圖連通,所有的頂點(diǎn)出度=入度。 無向圖:圖連通,所有頂點(diǎn)都是偶數(shù)度。2.并查集 使用并查集解決此問題。 通過并查集可以得知該節(jié)點(diǎn)是否度數(shù)為0,即是否是單獨(dú)的一個點(diǎn)或者連通塊 [并查集知識](https://zhuanlan.zhihu.com/p/93647900/)三、代碼
(同一學(xué)校請勿直接扮演。。。😰害怕)
//七橋問題 //歐拉回路、并查集 #include<iostream> using namespace std; int dushu[1010];//節(jié)點(diǎn)度數(shù)記錄 int fa[1010];//并查集 int find(int x) {//將父節(jié)點(diǎn)設(shè)置為根節(jié)點(diǎn) return x==fa[x]?x:(fa[x]=find(fa[x]));} void merge(int x,int y)//合并,將序號小的設(shè)置為序號大的根節(jié)點(diǎn) {int fx=find(x);int fy=find(y);//尋找兩個根節(jié)點(diǎn) if(fx>fy)fa[fx]=fy;elsefa[fy]=fx;} int main(){for(int i=0;i<1010;i++)fa[i]=i;//初始化操作,一般將父節(jié)點(diǎn)設(shè)置為本身 int n,m;cin>>n>>m;for(int i=0;i<m;i++){int x1,x2;cin>>x1>>x2;merge(x1,x2);//合并,設(shè)置父節(jié)點(diǎn) dushu[x1]++;dushu[x2]++; }int flag=1;//設(shè)置判斷標(biāo)志int sum=0;//連通塊個數(shù)for(int i=1;i<=n;i++){//無向連通圖,且所有節(jié)點(diǎn)度數(shù)為偶數(shù),則存在歐拉回路 if(dushu[i]%2!=0)flag=0;//度數(shù)為奇數(shù),不連通if(i==fa[i])sum++;//判斷度數(shù)為0的點(diǎn)(父節(jié)點(diǎn)是其本身,證明度數(shù)為0) }if(sum!=1)flag=0;if(flag==1) cout<<"1";if(flag==0) cout<<"0"; return 0; }程序是藍(lán)色的詩
總結(jié)
以上是生活随笔為你收集整理的PTA:7-1 哥尼斯堡的“七桥问题” (25 分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度运营笔试题
- 下一篇: 鸟哥的linux私房菜学习笔记7