[問題] 有關dict用法 (DFS找有向圖中的cycle)

看板Python作者 (Huan)時間5年前 (2018/11/11 00:00), 5年前編輯推噓0(0010)
留言10則, 2人參與, 5年前最新討論串1/1
我想要改DFS演算法來找有向圖有沒有cycle 這是我的code:https://pastebin.com/6G5FL7DQ 我的判斷法是有back edge就表示有cycle 就從這個edge開始回推找DFS的父點 直到找到起點為止,如code 49~58行 我表示圖的方法是用dict表示相鄰串列 https://imgur.com/YrOsr66.jpg
G = { 'P1': ['P2'], 'P2': ['P4', 'P5', 'P3'], 'P3': ['P4'], 'P4': ['P1'], 'P5': [] } 如上面圖的例子就用dict表示對應到的邊 然後為了DFS方便建立一個表示graph的class 程式可以執行,在第63~65行有印出結果 但return回findCycle()之後東西就不見了 而且return後也不是空list而是None 另外在63~65行測試印的結果 有些cycle是正確找到的但有些會有點怪 像我有其中一個測資找到的cycle list裡面竟然有None https://imgur.com/uTjVFfC.jpg
是我想到的方法還有什麼有問題的地方嗎>< 小的初學菜逼八不懂比較多 麻煩各位前輩指教 感謝萬分 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.91.122 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1541865645.A.A9F.html

11/11 07:34, 5年前 , 1F
建議你可以直接研究Introduction to Algorithms,檢查DAG就n
11/11 07:34, 1F

11/11 07:36, 5年前 , 2F
是把notices依postvisite id從大到小排序的結果
11/11 07:36, 2F

11/11 12:39, 5年前 , 3F
我是想找已經有cycle的圖然後把他列出來
11/11 12:39, 3F

11/11 12:39, 5年前 , 4F
DAG原本就是無cycle的不知道能不能用><
11/11 12:39, 4F
※ 編輯: skyHuan (223.140.71.48), 11/11/2018 16:39:06

11/11 17:28, 5年前 , 5F
不好意思我想成topological sort了
11/11 17:28, 5F

11/11 17:29, 5年前 , 6F
Check DAG應該是每次遇到neighbor vertice就檢查previsitId
11/11 17:29, 6F

11/11 17:31, 5年前 , 7F
若neighbor的previsit id < current的previst id
11/11 17:31, 7F

11/11 17:31, 5年前 , 8F
表示之前visit過,則非DAG
11/11 17:31, 8F

11/11 18:29, 5年前 , 9F
我的那段code有用到類似的概念,我就是靠previsit去找cyc
11/11 18:29, 9F

11/11 18:29, 5年前 , 10F
le的,但結果還是有點錯><
11/11 18:29, 10F
文章代碼(AID): #1Rvm2jgV (Python)