利用鄰接矩陣求出圖形中是否存在cycle |
答題得分者是:dllee
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
Old question
Set Elements A {502, 510, 972, 1444} B {37, 721, 972, 1444} C {37, 502, 972, 1444} D {721, 836} E {510, 671} F {671, 836} 原來我主要的目的,是要找出可以從點A再次回到點A的路徑是否存在。 我將上表整理成...若有共同的element表示可以相連 A → B C E B → A C D C → A B D → B F E → A F F → D E 鄰接矩陣M為 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 0 1 0 1 1 0 0 0 1 1 0 0 0 1 1 1 本想透過Transitive closure的方式,但是他試用於有向圖,如果用在無向圖可能會有A→A的問題。 因此當M^3以後,所有的element均為1,無法用來判斷是否有cycle 不知道是否有其他的演算法可以找出從點p出發,是否存在cycle?以及cycle的路徑為何? 謝謝 編輯記錄
GGL 重新編輯於 2007-08-29 17:00:30, 註解 無‧
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
因為我看書:
本來是想透過窮舉的方式,今天翻了DS跟Algorithm的書,找到在directed graph的方法,但是用在undirected graph會有問題。 因此,到這邊問問看是否有人看過其他的方法。大家互相討論吧 |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
您的 鄰接矩陣 與別人的不太一樣耶...
看看維基百科: 鄰接矩陣 其中 void DFS(MGraph G,int v) { /* 從第v個頂點出發遞歸地深度優先遍歷圖G。演算法7.5 */可能看一下英文的 Adjacency matrix 會比較準一些。 只是在應用上可以用在什麼上呢? 還是只是算數學?
------
http://www.ViewMove.com |
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
它是自己對自己是 0 喔, 而您的是 1 主要是這點不同。
以您整理的關係: A → B C E B → A C D C → A B D → B F E → A F F → D E 鄰接矩陣M 應為 0 1 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 由維基百科:http://en.wikipedia.org/wiki/Adjacency_matrix the adjacency matrix of a finite directed or undirected graph G on n vertices is the n × n matrix where the nondiagonal entry aij is the number of edges from vertex i to vertex j, and the diagonal entry aii is either twice the number of loops at vertex i or just the number of loops 表示 aii 是自己連到自己的 loop 個數的 1 倍或 2 倍數,但在您的表內,並沒有自己到自己,所以是 0 另一個參考資料:Spectral Graph Theory and its Applications 提到 Lecture 6. Random walks on expanders 若由 A 出發則 p0 為 1 0 0 0 0 0 p1 = M x p0 表示由 A 出發下一點的位置 (即 B,C,E) 0 1 1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 p2 = M x p1 = M x M x p0 表示由 A 出發走 2 步的位置 (A,B,C,D,F) 0 1 1 0 1 0 0 3 1 0 1 1 0 0 1 1 1 1 0 0 0 0 1 1 0 1 0 0 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 其中,A 位置 3 表示走到第 2 步就有 3 條可走回 A (即 ABA, ACA, AEA) p3 = M x p2 = M x M x p1 = M x M x M x p0 0 1 1 0 1 0 3 2 1 0 1 1 0 0 1 5 1 1 0 0 0 0 1 4 0 1 0 0 0 1 1 2 1 0 0 0 0 1 0 4 0 0 0 1 1 0 1 1 其中,A 位置 2 表示走到第 3 步就有 2 條可走回 A 這樣的運算,還是要保留每次的結果才知道路徑,只留最後的結果,應該無法知道路徑。
------
http://www.ViewMove.com |
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
topic.csdn.net/t/20020901/19/987755.html
<textarea class="cpp" rows="10" cols="60" name="code">const int MAX_N = 100; //最多的節點數 const char* INPUT_FILE = "Graph.txt"; struct Graph { int NodeCount; //節點數目 int AdjMatrix[MAX_N][MAX_N]; // 鄰接矩陣,如果圖中i,j相鄰,則 G[i][j]>0,否則 G[i][j]=0 }; //--------------------------------------------------------------------------- typedef int Path[MAX_N]; // 儲存路徑 typedef bool Marking[MAX_N]; //--------------------------------------------------------------------------- void PrintPath(Path& path, int length) { for(int i=0;i |
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
一直忘了回覆,我查閱以前的資料結構課本,上面寫說...對角線是0或1看自己的需求,所以0或1都是對的...
===================引 用 dllee 文 章=================== 它是自己對自己是 0 喔, 而您的是 1 主要是這點不同。 以您整理的關係: A → B C E B → A C D C → A B D → B F E → A F F → D E 鄰接矩陣M 應為 0 1 1 0 1 0 1 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |