1. 程式人生 > >總結——DFS && BFS

總結——DFS && BFS

目標 pan 狀態 限制 ash 深度 push dfs 所有

深度優先搜索廣度優先搜索

1. 思路

  深度優先搜索偽代碼:

void dfs(狀態A){
    if  (A不合法)  return;
    if  (A為目標狀態)  輸出;
    if  (A不為目標狀態)  dfs(A+x);
}

  廣度優先搜索偽代碼:

Q.push(head)
while (!Q.empty()){
    temp=Q.front();
    Q.pop;
    if  (temp為目標狀態)  輸出;
    if  (temp不合法)  continue;
    if  (temp合法)  Q.push(x);//x表示temp在搜索樹中的所有子節點  
}

2. 適用範圍——如何判斷用深搜還是廣搜?

  DFS:可以不重不漏枚舉所有可達目標狀態的路徑。

  BFS:效率高,適用於找最快到達目標狀態的路徑。占用空間大。

  ① “最快”、“最短”、“最近”——廣搜

  ② 沒有深度限制,深搜可能永遠搜不到頭——廣搜

總結——DFS && BFS