搜尋中比較基礎也比較重要的就兩種 廣搜(BFS)和深搜(DFS)
其實搜尋可以了解為一種進階的暴力(周遊所有的點),簡單的說就是從一個點開始搜尋所有可能到達的點
一. 深度優先搜尋
可以分為兩種一種用遞歸一種不用遞歸(不用遞歸的比較麻煩就不給大家講了)
首先遞歸應該都很清楚,不清楚的同學們可以看看下面的這篇文章(講解的很清楚)https://blog.csdn.net/sinat_38052999/article/details/73303111
主要過程
1.先從一個點出發,不斷地走,直到不能走的點或者中點
2.遇到不能走的點時就回到上一個點繼續嘗試其他的點
一個模闆版幫助大家了解:
int dfs(step(步數)和 初始點資訊){
if(找到解(終止條件) || 無法繼續走下一步(邊界條件)){
...
return;
}
枚舉下一種情況,dfs(step+1);
}
//和遞歸比較像
一. 廣度優先搜尋
要用到隊列的知識,不知道的同學看這裡 (講解的也是非常清楚)https://blog.csdn.net/lym152898/article/details/52202606
主要過程:
1.将初始點加入隊列。
2.判斷隊列不為空。
3.将于隊首相鄰的點加入隊列,直到找到目标點。
一個模闆供大家了解:
int bfs(){
先初始化隊列a
a={起點s};
标記s;
while(a非空){
取a隊首元素u;
U出隊;
if(u ==目标狀态){
.....
}
與u相鄰且通路的點進入隊列;
标記u為已通路;
}
}