1. 程式人生 > >有向圖和無向圖的環檢測

有向圖和無向圖的環檢測

路徑 深度遍歷 不可 兩個 說明 使用 插入 深度優先 標記

1.無向圖

並查集:檢查每一條邊的兩個端點是否是相同的連通子圖,如果是相同的,說明存在環;

深度遍歷:使用鄰接矩陣,只需要用一個數組標記是否訪問過,如果訪問過且不是該節點的父節點,則有環;

廣度優先:可以;

2.有向圖

拓撲排序:用一個隊列記錄入度為0的點,然後將他們去除時,另邊的另一頭節點的入度減一,不斷記錄入度為0的點,

     若最後沒有入度不為0的點,則沒有環,否則有環;不斷的插入隊尾,循環;

深度遍歷:和無向圖不同的是,我們不能直接和無向圖的深度遍歷一樣,因為有可能出現,一個節點同時是2個節點的

     孩子節點,但這個時候不是環,所以需要去除標記,或者使用三種標記:0代表節點沒有訪問過,-1代表節點

    被訪問過一次,但它還有孩子節點未被訪問完,1代表該節點的深度遍歷已經結束;這種方法比較巧妙,不需要

    去除標記;

廣度優先:不可以,深度優先記錄的是經過的路徑,環出現在經過的路徑上;

有向圖和無向圖的環檢測