下面介紹一下:「什麼叫做尤拉迴路?」。
尤拉迴路:有一條路從開始的位置到結束的位置都是同乙個位置,經過了所有的點且通過了所有的邊,通過的次數只能一次。比如著名的「哥尼斯堡七橋問題」
尤拉路:在尤拉迴路的基礎上面改乙個條件。就是有一條路使得從開始的位置到結束的位置不是乙個位置。
總結:具有一條經過所有邊的簡單迴路,稱尤拉迴路,含尤拉迴路的圖稱為尤拉圖;如果圖g中具有一條經過所有邊的簡單(非迴路)路徑,稱尤拉路!
尤拉迴路和尤拉路也有乙個充分的判斷條件。
尤拉迴路:每乙個結點都是偶結點。尤拉路:存在兩個結點是奇結點。其餘的是偶結點。
fleury演算法步驟如下:
1.任取vo屬於v(g),令po = vo 2.設pi = voe1v1e2.....eivi,
如果e(g)-中沒有與vi關聯的邊,則計算停止;否則按下述的條件從e(g)-中任取一條邊ei+1;
(a)ei+1與vi相關聯。
(b)除非無別的邊可供選擇,否則ei+1不應該選擇gi = g-中的橋。
設ei+1=(vi,vi+1),把ei+1vi+1加入pi,
3.令i = i+1,返回2.
大致意思就是:
他先把圖形建立,隨便選擇開始點,把vi的點對應的邊設定為ei+1,結束條件就是如果此時的這一點沒有關聯的邊的時候則演算法結束(簡單的說就是存在可以找的到的一條尤拉迴路的判斷條件。)。否則你隨便可以選擇哪一條邊走,選擇邊的時候,除非沒有別的邊可以提供你選擇,否則不要去選擇過橋。
以上就是他的計算方法,他的思路其實很簡單,採用的思想選擇含一點遞迴思想,就是不斷的選擇邊,當時在選擇邊的時候有一種邊叫做橋,在是不是選擇過橋的時候,加一點條件就可以了。
橋的概念就是:
你走過的路度可以看作消失了,之後當你走到乙個點的時候,你發現你沒有路可以走的時候,那麼你之前走過的那條路就稱為橋。
當然我們知道了什麼叫做橋。我們還應該明白什麼時候我們要去過橋,什麼時候我們不去過橋。
在此我們有一句口訣:「能不過橋,絕對不過橋。」
下面來乙個圖,讓我們去看求一條簡單尤拉迴路。
就是從1開始遍歷所有的點,然後回到原點,組成乙個簡單的尤拉迴路。
讓我們看乙個很著名的選擇路徑的問題。
如圖是乙個尤拉圖,某人用fleury演算法求這個圖中的尤拉迴路是什麼?
乙個走了一些簡單迴路 v1e1 --> v2e2 --> v3e3 --> v4e14 --> v9e10 --> v1e8 --> v8e8 --> v9e2之後,無法進行下去試著分析一下他在哪一步出現了問題?
原圖如下:
下面我借上面的走法去解釋一下:
首先就是v1e1
走v2e2
走v3e3
走v4e14
走v9e10
走v2e9
走v8e8
從上面我們可以看的出,就是最後的一次選擇路徑的時候,使得路由連通的變為不連通圖,所以那一條邊是「橋」。
首先,我們知道存在開始點和未走的點的圖不連通了。也就是v1和v7,v6,v5的連通性是不連通的。因為他選擇的路徑是如下圖:
我們可以看到,存在一些點,未走過點,要想走完,就得一些邊走第二遍,所以這是明顯不可能。此時求得圖,也不是尤拉迴路圖。
尤拉迴路中,要求就是點可以過幾次,但是邊只能過一次,而且起點和終點在同一點。
所以我們在選擇邊的時候只要記得選擇的要求就可以了。
以上就是fleury演算法求尤拉迴路的簡單過程。
離散複習資料之一(Warshall演算法)
我們先對r n 進行解釋一下,不然你們看不太懂。就是r n 表示,通過從 1.n 個點繞到到達所求點,注意原來的位置的點,發生改變的就是剛才的含義去解釋。給乙個例子解釋一下。其中的r i r n 0 n 4 初始的r 0 就是可達矩陣。r 1 表示在r 0 的基礎上面變化 r 1 表示在r 0 的基...
Oracle複習之一
oracle7 以前用varchar不支援國際化 varchar2支援 查詢語句 dml 資料操作語言 ddl 資料定義語言 select select from emp select ename,sal 12 from emp select 2 3 from dual dual 表就一條記錄 乙個...
Spark複習之一
rdd 只支援粗粒度轉換,即在大量記錄上執行的單個操作。將建立 rdd 的一系列 lineage 血統 記錄下來,以便恢復丟失的分割槽。rdd 的 lineage 會記錄 rdd 的元資料資訊和轉 換行為,當該 rdd 的部分分割槽資料丟失時,它可以根據這些資訊來重新運算和恢復丟失的 資料分割槽。r...