[图论]欧拉回路的个数
歐拉回路就是用一筆走過所有的路,現(xiàn)在讓你判斷到底有幾個(gè)歐拉回路,也就是說走一個(gè)圖需要用幾筆。
傳送門QAQ
首先根據(jù)給出的邊我們只需要分別處理每個(gè)連通分量需要多少筆即可.
? ? ? ? 如果該連通分量是一個(gè)孤立的點(diǎn),顯然只需要0筆.
? ? ? ? 如果該連通分量是一個(gè)歐拉圖或半歐拉圖,只需要1筆.
? ? ? ? 現(xiàn)在關(guān)鍵是連通分量并非一個(gè)(半)歐拉圖時(shí),需要幾筆?
? ? ? ? 一般性的結(jié)論是:
? ? ? ?非(半)歐拉圖需要的筆數(shù)==該圖中奇數(shù)度的點(diǎn)數(shù)目/2
? ? ? ?下面來證明該結(jié)論:
? ? ? ?首先一個(gè)無向圖的連通分量中的奇數(shù)度的點(diǎn)個(gè)數(shù)一定是偶數(shù)個(gè)(成對(duì)出現(xiàn)),因?yàn)闊o向圖的總度數(shù)=偶數(shù).
? ? ? ?我們?cè)谶@種連通分量中每次畫一筆有兩種選擇:
? ? ? ?1.a->b->c->d…->g??? 一條起點(diǎn)與終點(diǎn)不同的路徑(路中除首尾度減1外,每個(gè)點(diǎn)度減2)
? ? ? ?2.a->b->c->d…->a??? 一條起點(diǎn)與終點(diǎn)相同的回路(路中每個(gè)點(diǎn)度數(shù)減2)
? ? ? ?也就是說想要把非(半)歐拉圖分量中的奇數(shù)度的點(diǎn)的度數(shù)都變成偶數(shù),我們至少需要畫奇數(shù)度點(diǎn)個(gè)數(shù)/2 筆.
? ? ? ?那么對(duì)于這種圖我們最多需要畫的筆數(shù) 是不是也是 : 奇數(shù)度點(diǎn)個(gè)數(shù)/2 筆呢?
? ? ? ?答案是肯定的,這里假設(shè)圖中有4個(gè)奇數(shù)度的點(diǎn),1,2,3,4,5,6.如下圖所示:
?
? ? ? ?我們先走路:1-> b-> c-> d-> e-> f->a-> 2 這條路.然后6,5 和3,4 分別屬于兩個(gè)連通分量了.可以看出只需要3筆,即6/2=3即可.
? ? ? ?也就是說對(duì)于這種非(半)歐拉圖的連通分量,我們每筆必然消除正好2個(gè)點(diǎn)的奇度(使其度變偶數(shù)),當(dāng)最后一筆的時(shí)候我們必然消除所有的點(diǎn)的度數(shù)(包括剩下的兩個(gè)奇點(diǎn),因?yàn)樽詈笠还P就必然是歐拉通路).但是有一點(diǎn)要注意,有可能過程中的某幾筆會(huì)使得該連通分量變成多個(gè)連通分量,當(dāng)然結(jié)論不變.
?????? 經(jīng)過上面的分析,這題的結(jié)論出來了,對(duì)于每個(gè)以i為根的連通分量我們記錄屬于該連通分量的點(diǎn)數(shù)目num[i]和該連通分量中奇度點(diǎn)的個(gè)數(shù)odd[i].
?????? 如果num[i]==0或1,需0筆.(注意num[i]==0表示i點(diǎn)不是根,num[i]==1表示i點(diǎn)是一個(gè)孤立的點(diǎn).)
?????? 如果num[i]>1且odd[i]==0 需1筆
?????? 如果num[i]>1且odd[i]>0 需odd[i]/2筆
?
轉(zhuǎn)載于:https://www.cnblogs.com/Kaike/p/10417939.html
總結(jié)
以上是生活随笔為你收集整理的[图论]欧拉回路的个数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初步学习大数据——设置虚拟机固定ip地址
- 下一篇: 转载--html显示当前时间