深度優先搜尋 廣度優先搜尋

2021-10-05 02:08:38 字數 2261 閱讀 3609

深度優先搜尋 廣度優先搜尋

通過鄰接矩陣對圖進行深搜和廣搜

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 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋與廣度優先搜尋

深度優先遍歷的主要思想就是 首先以乙個未被訪問過的頂點作為起始頂點,沿當前頂點的邊走到未訪問過的頂點 當沒有未訪問過的頂點時,則回到上乙個頂點,繼續試探訪問別的頂點,直到所有的頂點都被訪問。沿著某條路徑遍歷直到末端,然後回溯,再沿著另一條進行同樣的遍歷,直到所有的頂點都被訪問過為止。通過上面的圖例可...