迷宮問題 深搜經典問題

2021-10-02 11:17:14 字數 1843 閱讀 9410

迷宮問題是深搜演算法的最常見也是最基礎的題型之一

深搜大家應該都已經理解了

如果還不知道深搜是什麼可以參考我之前的一篇:深搜講解

我們把我們撞南牆才回頭的思想運用到我們的迷宮問題中

就可以理解為:

從起點開始隨便找一條路開始走

走到了終點或沒有繼續向前的格仔就回頭

用最簡單的2x2迷宮來舉例

如果我們設起點是(1,1)這個點,終點是(2,2)這個點,

障礙物是(2,1)這個點。

方向陣列**

#include

using

namespace std;

int a[10]

[10];

int fxx[5]

=;int fxy[5]

=;int n,m,t;

int toi,toj;

int flag=0;

void

dfs(

int nowi,

int nowj)

;int

main()

}}int nowi,nowj;

cin >> nowi >> nowj >> toi >> toj;

a[nowi]

[nowj]=1

;int xi,xj;

while

(t--

)dfs

(nowi,nowj)

; cout << flag << endl ;

return0;

}void

dfs(

int nowi,

int nowj)

for(

int i=

1;i<=

4;i++)}

}

普通**

#include

using

namespace std;

int n,m,t;

int a[10]

[10];

//標記x,y這個點是否是障礙物或已經被走過

int nowi,nowj;

//現在走到**了,即現在的座標

int toi,toj;

//終點座標

int flag;

//有幾種路徑,即最後輸出的答案

void

work

(int x)

;//執行函式

intmain()

work(1

);cout << flag << endl ;

a[nowi]

[nowj]=0

;//清楚此次起點的標記

memset

(a,0

,sizeof

(a))

;//最後清0陣列,具體是清楚障礙物標記的地方

}return0;

}void

work

(int x)

else}if

(x==2)

//把它移動向列數增加的那一格}if

(x==3)

//把它移動向行數減少的那一格}if

(x==4)

//把它移動向列數減少的那一格}if

(x+1

<=4)

//不能加else哦,理解一下

/*不管是不滿足以上條件,還是從上面條件執行完再出來,

都要進行它的下一項(如果沒有超出邊界的話)*/

work

(x+1);

}}

迷宮問題 深搜

簡單的實現了迷宮 深搜 並非是最短路徑 我們規定 1 為牆,0 為通路。為了避免越界,在迷宮外面加了一堵牆。當然也可以不需要牆。實現很簡單,用乙個陣列棧儲存已訪問過的位置,用四個if語句判斷東南西北四個方向能否走通。若往前已無路可走便退回上乙個位置。具體實現如下 include include de...

迷宮問題(深搜

d 迷宮問題 crawling in process.crawling failed time limit 1000msmemory limit 65536kb64bit io format i64d i64u submit status description 定義乙個二維陣列 int maze ...

迷宮問題(深搜 回溯)

time limit 1 sec memory limit 128 mb 64bit io format lld submit status web board 設有乙個n n 2 n 10 方格的迷宮,入口和出口分別在左上角和右上角。迷宮格仔中分別放0和1,0表示可通,1表示不能,入口和出口處肯定...