深搜 模板題 迷宮問題

2021-09-11 01:29:02 字數 1241 閱讀 7711

迷宮 【問題描述】

給定乙個n*m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和

終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮

中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。

輸入樣例 輸出樣例

【資料規模】

1≤n,m≤5

【輸入】

第一行n、m和t,n為行,m為列,t為障礙總數。第二行起點座標sx,sy,終點

座標fx,fy。接下來t行,每行為障礙點的座標。

【輸出】

給定起點座標和終點座標,問每個方格最多經過1次,從起點座標到終點座標的方

案總數。

輸入樣例#1:

2 2 1

1 1 2 2

1 2

輸出樣例#1:

1
#include#define max 10

using namespace std;

//記錄地圖

int map[max][max];

//標記訪問情況

int flag[max][max];

//控制方向

int dirx[4] = ;

int diry[4] = ;

//記錄總解數

int sum = 0;

int n,m,t,sx,sy,fx,fy;

void dfs(int x,int y);

int main()

//標記起點已經訪問過

flag[sx][sy] = 1;

//從起點開始深搜

dfs(sx,sy);

coutcontinue;

if((y+diry[i]<=0)||(y+diry[i]>m))

continue;

//主要條件

if(flag[x+dirx[i]][y+diry[i]]==0&&map[x+dirx[i]][y+diry[i]]==0)

}}

/*******

返回值:空

引數:待搜尋路徑元素的下標

引數個數:圖維數,一般為 1 或者 2

****/

void dfs(int cur...)

//遍歷所有情況

for()

}}

迷宮問題 深搜

簡單的實現了迷宮 深搜 並非是最短路徑 我們規定 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表示不能,入口和出口處肯定...