[图论]欧拉回路的个数
歐拉回路就是用一筆走過所有的路,現(xiàn)在讓你判斷到底有幾個歐拉回路,也就是說走一個圖需要用幾筆。
傳送門QAQ
首先根據(jù)給出的邊我們只需要分別處理每個連通分量需要多少筆即可.
? ? ? ? 如果該連通分量是一個孤立的點,顯然只需要0筆.
? ? ? ? 如果該連通分量是一個歐拉圖或半歐拉圖,只需要1筆.
? ? ? ? 現(xiàn)在關(guān)鍵是連通分量并非一個(半)歐拉圖時,需要幾筆?
? ? ? ? 一般性的結(jié)論是:
? ? ? ?非(半)歐拉圖需要的筆數(shù)==該圖中奇數(shù)度的點數(shù)目/2
? ? ? ?下面來證明該結(jié)論:
? ? ? ?首先一個無向圖的連通分量中的奇數(shù)度的點個數(shù)一定是偶數(shù)個(成對出現(xiàn)),因為無向圖的總度數(shù)=偶數(shù).
? ? ? ?我們在這種連通分量中每次畫一筆有兩種選擇:
? ? ? ?1.a->b->c->d…->g??? 一條起點與終點不同的路徑(路中除首尾度減1外,每個點度減2)
? ? ? ?2.a->b->c->d…->a??? 一條起點與終點相同的回路(路中每個點度數(shù)減2)
? ? ? ?也就是說想要把非(半)歐拉圖分量中的奇數(shù)度的點的度數(shù)都變成偶數(shù),我們至少需要畫奇數(shù)度點個數(shù)/2 筆.
? ? ? ?那么對于這種圖我們最多需要畫的筆數(shù) 是不是也是 : 奇數(shù)度點個數(shù)/2 筆呢?
? ? ? ?答案是肯定的,這里假設(shè)圖中有4個奇數(shù)度的點,1,2,3,4,5,6.如下圖所示:
?
? ? ? ?我們先走路:1-> b-> c-> d-> e-> f->a-> 2 這條路.然后6,5 和3,4 分別屬于兩個連通分量了.可以看出只需要3筆,即6/2=3即可.
? ? ? ?也就是說對于這種非(半)歐拉圖的連通分量,我們每筆必然消除正好2個點的奇度(使其度變偶數(shù)),當最后一筆的時候我們必然消除所有的點的度數(shù)(包括剩下的兩個奇點,因為最后一筆就必然是歐拉通路).但是有一點要注意,有可能過程中的某幾筆會使得該連通分量變成多個連通分量,當然結(jié)論不變.
?????? 經(jīng)過上面的分析,這題的結(jié)論出來了,對于每個以i為根的連通分量我們記錄屬于該連通分量的點數(shù)目num[i]和該連通分量中奇度點的個數(shù)odd[i].
?????? 如果num[i]==0或1,需0筆.(注意num[i]==0表示i點不是根,num[i]==1表示i點是一個孤立的點.)
?????? 如果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显示当前时间