深度優先搜尋 廣度優先搜尋
通過鄰接矩陣對圖進行深搜和廣搜
package
com.neusoft.data.structure
;/**
* 深度優先搜尋 廣度優先搜尋
* 通過鄰接矩陣對圖進行深搜和廣搜
*/public
class
dfsbfs
// 初始化"邊"
mmatrix
=new
int[
vlen
][vlen
];for
(inti=
0;i<
elen;i
++)}
/** 返回頂點v的第乙個鄰接頂點的索引,失敗則返回-1
*/private
intfirstvertex
(intv)
}return-1
;}/** 返回頂點v相對於w的下乙個鄰接頂點的索引,失敗則返回-1
*/private
intnextvertex
(intv,
intw
)//i=w+1 下個索引號
for(
inti=w
+1;i
<
mvexs
.length;i
++)}
return-1
;}/** 深度優先搜尋遍歷圖的遞迴實現
*/private
void
dfs(
inti
,boolean
visited
)//行和列需要顛倒,,是按列掃瞄,掃瞄該元素後,在另起下一行w=
nextvertex(i
,w);//如果已經被訪問了,方向下個頂點索引}}
/** 深度優先搜尋遍歷圖
*/public
void
dfs()
system
.out
.printf
("dfs: "
);for
(inti=
0;i<
mvexs
.length;i
++)}
system
.out
.printf
("\n");}
/** 廣度優先搜尋(類似於樹的層次遍歷)
*/public
void
bfs()
system
.out
.printf
("bfs: "
);for
(inti=
0;i<
mvexs
.length;i
++)while
(head
!=rear
)//行就是行,列就是列,是掃瞄完一行的每個列,在掃下一行,不需要顛倒,k=
nextvertex(j
,k);//返回頂點v相對於w的下乙個鄰接頂點的索引,失敗則返回-1}}
}system
.out
.printf
("\n");}
/** 返回ch位置
*/private
intgetposition
(charch)
}return-1
;}///*
* 列印矩陣佇列圖
*/public
void
print
()system
.out
.printf
("\n");}
}public
static
void
main
(string
args);
char
edges
=new
char,,
,,,,
,,,,
,,,,
,,,,
,,,,
,,,};
dfsbfspg;
// 自定義"圖"(輸入矩陣佇列)
//pg = new matrixdg();
// 採用已有的"圖"pg=
newdfsbfs
(vexs
,edges
);pg
.print
();// 列印圖pg.
dfs();
// 深度優先遍歷pg.
bfs();
// 廣度優先遍歷
}}
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...
廣度優先搜尋,深度優先搜尋
深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...
深度優先搜尋與廣度優先搜尋
深度優先遍歷的主要思想就是 首先以乙個未被訪問過的頂點作為起始頂點,沿當前頂點的邊走到未訪問過的頂點 當沒有未訪問過的頂點時,則回到上乙個頂點,繼續試探訪問別的頂點,直到所有的頂點都被訪問。沿著某條路徑遍歷直到末端,然後回溯,再沿著另一條進行同樣的遍歷,直到所有的頂點都被訪問過為止。通過上面的圖例可...