判斷尤拉迴路

2022-06-08 14:21:08 字數 1327 閱讀 1276

算卦先生來問你,對於每個他給出的無向圖,是否存在一條路徑能夠經過所有邊恰好一次,並且經過所有點?不需要滿足最後回到起點。 

第一行乙個數 t,表示有 t組資料。對與每組資料,第一行有兩個數 n,m,接下去 m行每行兩個數 u,v描述一條無向邊 (u,v)。圖不保證聯通。

對於每組資料,如果存在,輸出 "zhen" ,否則輸出 "xun"。 

示例1

複製

2

2 21 1

2 14 6

1 31 4

1 23 2

4 24 3

複製

zhen

xun

2≤n≤30

1≤m≤n*(n−1)/2

判斷尤拉迴路:

1.是要連通,是所有邊只能經過一次,並且要經過所有的點。所以,可以用並查集來檢查無向圖的連通性,

如果有不連通的,則輸出「xun」,若無向圖連通,則進一步考慮,這個可以用並查集判斷

2.可以想象一下,若存在一條路徑能夠經過所有邊恰好一次,並且經過所有的點,

那麼除了開頭的點和結尾的點都只會出現兩次,進一步向下,若開頭和結尾相連(形成乙個環),

則開頭和結尾也會出現兩次,反之,若不相連,則開頭和結尾出現一次,此時只要看每個點的出現次數是否為奇數,

並算出奇數的個數cnt,若cnt=0或cnt=2,則為「zhen」,反之,為「xun」。

判斷尤拉通路是離散數學的知識,對於無向圖來說,度數為奇數的的點可以有2個或者0個,並且這兩個奇點其中乙個為起點另外乙個為終點

#include#include

using

namespace

std;

const

int maxn=1e6+100

;int

degree[maxn],pre[maxn];

intn,m;

int find(int

x)

else

}void marge(int x,int

y)}

intmain()

intx,y;

for(int i=1;i<=n;i++)

int cnt=0

;

for(int i=1;i<=n;i++)

}if(cnt>1)

else

}if(cnt==0||cnt==2)

else}}

}

HDU 1878 尤拉迴路(判斷尤拉迴路)

題目大意 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?解題思路 判斷無向圖是否存在尤拉迴路,判斷每個點的度數是否為偶數 並查集確認連通性。1 include2 include3 include4 define clr arr,val...

尤拉迴路的判斷

華電北風吹 天津大學認知計算與應用重點實驗室 2016 06 29 尤拉迴路 圖g,若存在一條路,經過g中每條邊有且僅有一次,稱這條路為尤拉路,如果存在一條迴路經過g每條邊有且僅有一次,稱這條迴路為尤拉迴路。具有尤拉迴路的圖成為尤拉圖。判斷尤拉路是否存在的方法 有向圖 圖連通,有乙個頂點出度大入度1...

尤拉迴路 尤拉通路判斷

尤拉迴路 圖g,若存在一條路,經過g中每條邊有且僅有一次,稱這條路為尤拉路,如果存在一條迴路經過g每條邊有且僅有一次,稱這條迴路為尤拉迴路。具有尤拉迴路的圖成為尤拉圖。判斷尤拉通路是否存在的方法 有向圖 圖連通,有乙個頂點出度大入度1,有乙個頂點入度大出度1,其餘都是出度 入度。無向圖 圖連通,只有...