深度優先搜尋(dfs),其過程簡單來說就是從每乙個可能的分支出發深入到無法深入
為止,並且每個節點只訪問一次。
深搜的實質就是窮舉,按照一定的順序和不同的方法不斷去嘗試,最後尋找到答案,
在不斷搜尋的過程中,滿足條件的狀態就是目的狀態之一。
void
dfs(
int x,
int y)
a[xx]
[yy]=1
;//標記
dfs(xx,yy)
; a[xx]
[yy]=0
;//走過之後取消標記
}
迷宮問題(原題)
思路:先從出發點隨意找個方向走,一步一步向前試探,碰到了死胡同或者無路可走了,再看看有沒有其他路可走,若還有其他路可走,選擇可走的路繼續試探,如果沒有路可走了,就退回到上一步,以這樣的方法不斷退回和探索,直到找到出口為止。
**:
#include
#include
#define maxn 10
using
namespace std;
int n,m,t,sx,sy,fx,fy,l,r,sum;
int a[maxn]
[maxn]
,b[maxn]
[maxn]
;//a表示迷宮的地圖,b用來標記
int ax[4]
=,ay[4]
=;//橫座標的上下左右,縱座標的上下左右
void
dfs(
int x,
int y)
for(
int i=
0;i<
4;i++)}
}int
main()
a[sx]
[sy]=0
;//將起點賦值為0
dfs(sx,sy)
; cout
}
深搜與廣搜以及例題
做題目的時候,遇見了兩個型別十分相似的題目,可以乙個直接輸出最短的步數,乙個要儲存,這個就很犯難 然後通過這兩題,有重新了解了乙個bfs與dfs的區別 一 路徑的輸出 1.dfs dfs其實就是一直順著乙個方向不斷的搜尋知道找到了目標為止。路徑輸出的時候,利用記錄前面的點即可 include inc...
迷宮問題 深搜經典問題
迷宮問題是深搜演算法的最常見也是最基礎的題型之一 深搜大家應該都已經理解了 如果還不知道深搜是什麼可以參考我之前的一篇 深搜講解 我們把我們撞南牆才回頭的思想運用到我們的迷宮問題中 就可以理解為 從起點開始隨便找一條路開始走 走到了終點或沒有繼續向前的格仔就回頭 用最簡單的2x2迷宮來舉例 如果我們...
hdu1518Square 經典深搜
好久沒做深搜了,上午優哉遊哉的想自己的為啥超時要咋剪枝呢,得到下午就考生態期中的噩耗直接跑出去了 說題意 乙個月前學弟問過,簡單看過 都忘了,b 既然是深搜,函式引數裡面一定是帶著需要用的量的 對於這個題來說,帶著的三個引數分別是 當前這條邊的長度,湊完的邊數,從第幾個木棍開始找 看這個 就在糾結 ...