深度優先用法之檢測有無環

2022-04-11 09:20:26 字數 901 閱讀 4200

學習心得:課前沒有好好預習,上課被老師問倒一片悶,o(︶︿︶)o,課後好好反思,以後要好好預習演算法!!

(前提是無向環裡沒有自環邊,平行邊)

//

檢測乙個無向圖是否有環

public

class

cycle

private

void dfs(graph g,int v,int

u)

public

boolean

hascycle()

}

/*具體解釋:

要判斷無向圖是否存在乙個環,則必須是要求是有3個或3個以上的點頂點是兩兩相連的,使用深度優先搜尋,每條邊都會被訪問兩次,這樣兩個頂點之間就有兩邊,

但這不能說是環!!所以在dfs中就加多了乙個變數u,用來記錄當前節點的上乙個節點,即為該節點的父節點。

①對於兩個節點的情況:

先進行dfs(1,1),標記1號節點,

然後再dfs(2,1) (此時v=2,u=1),遞迴標記2號節點,之後又從回去檢測1號節點(此時w=1),就出現w==u的情況,表明不滿足環的條件

對於三個節點的情況:

假設先進行dfs(1,1),標記1號節點,

然後再dfs(2,1) ,遞迴標記2號節點,

標記好2號節點後,繼續dfs(3,2),遞迴標記3號節點,

標記好3號節點後,最後又會回到標記1號節點,此時v=3,u=2,w=1,滿足條件,成環!!!

以此類推,大於3個頂點的也成立。

這是乙個很巧妙的設計,可以用其他的辦法來規避這種兩個頂點的情況,但毫無疑問,這個在dfs中加多乙個變數的方法,真是太贊了!!

*/

深度優先搜尋之深度體驗

迷宮有n行m列的單元格組成 n和m都小於等於50 每個單元格內要麼是空地,要麼是障礙物。找到一條從迷宮的起點通往迷宮內任意一點的最短路徑。注意 障礙物是不能走的,也不能走到迷宮之外。include include int n,m,p,q,len,min 99999999 int a 51 51 bo...

深度優先搜尋的用法 lake counting

深度優先搜尋的用法 lake counting 問題主題 lake counting 問題描述 有乙個大小為n m的園子,雨後積了很多水。八連通的積水被認為是在一起的。請求出園子裡共有多少個水窪?八連通是指下圖中相對 的 部分 限制條件 n,m 100 樣例 輸入n 10,m 12 園子如下圖 表示...

樹之深度優先遍歷

直接貼 只需要修改中間列印的位置,放在最前面就是先序遍歷,放在中間,就是中序遍歷,放在後面就是後序遍歷 貼 public class main public static void initnode node head public static void printf node node clas...