迷宮問題是深搜演算法的最常見也是最基礎的題型之一
深搜大家應該都已經理解了
如果還不知道深搜是什麼可以參考我之前的一篇:深搜講解
我們把我們撞南牆才回頭的思想運用到我們的迷宮問題中
就可以理解為:
從起點開始隨便找一條路開始走
走到了終點或沒有繼續向前的格仔就回頭
用最簡單的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表示不能,入口和出口處肯定...