迷宮 【問題描述】
給定乙個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 1 2 2
1 2
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表示不能,入口和出口處肯定...