1. 程式人生 > >BFS寬度搜索(佇列)與DFS深度搜索(遞迴)

BFS寬度搜索(佇列)與DFS深度搜索(遞迴)

1;應用方面
——————bfs寬度搜索用於尋找最優解;
——————dfs深度搜索用於遍歷尋找解;

2;實現原理;

——bfs;利用佇列;層次來搜尋的;
這裡寫圖片描述
解釋一下圖片;
第一層;–A;
第二層;–BCD;
第三層;–EF;
第四層;–GH;
第4層;–I;
因為他是按層搜尋,就是說只要bfs搜尋到結果那麼一定是最優解;;
來個題目化的;將上圖CI連線,求從A到I最短路徑;依舊劃分層次;第三層就會搜到I;也就是說bfs最先搜到的一定是最優 解;
模板;//結合上圖理解程式碼;

Q={起點s}; 標記s為己訪問;
    while (Q非空) {
        取Q隊首元素u; u出隊;
        所有與u相鄰且未被訪問的點進入佇列;
        標記u為已訪問;
    }
///
/////////////////////////////////////////////////////////
whlie (佇列不空) { u = 對隊首元素; 首元素出隊; for (所有與 u 鄰接點 v) // u 的上 下 左 右 // if(v 的座標在 row, col之內 // 並且 v 不是牆 // 並且 v 未被遍歷) v 入隊 }

——dfs;利用運用堆疊,遞迴層次搜尋,回溯來遍歷全部;
這裡寫圖片描述
解釋一下圖片;
利用回溯,一條道路走到底,然後返回上一級,繼續進行搜尋,直到搜尋完畢;

模板;//結合上圖理解程式碼;

void DFS( Point P )
{ for(所有P的鄰接點K){ if(K未被訪問){ 標記K; DFS(K); //有時候要清空之前的標記; } } }