學習心得:課前沒有好好預習,上課被老師問倒一片悶,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...