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