迷宮 【問題描述】
給定乙個n*m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和
終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮
中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。
輸入樣例 輸出樣例
【資料規模】
1≤n,m≤5
輸入輸出格式
輸入格式:
【輸入】
第一行n、m和t,n為行,m為列,t為障礙總數。第二行起點座標sx,sy,終點
座標fx,fy。接下來t行,每行為障礙點的座標。
輸出格式:
【輸出】
給定起點座標和終點座標,問每個方格最多經過1次,從起點座標到終點座標的方
案總數。
首先判斷下一步是否可以走,可以走則進行遞迴,並標記已選(即標記下一步),遞迴結束後還原標記。這個思路有坑的地方在於開始位置已經選擇不可以再次遞迴,但是一開始容易忽略。其次,棋盤的定義也是花了我不少時間,因為輸入n*m是行和列,所以行最小是1,陣列的最大值應為n+1,對應的m也一樣
#include
#include
using namespace std;
int row1, row2, barrier;
int startx, starty, endx, endy;
int area[6]
[6]=
;int ans =0;
void
dfs(
int x = startx,
int y = starty)
//往上走
if(y < row2 && area[x]
[y +1]
!=1)//往下走
if(y >
1&& area[x]
[y -1]
!=1)//往右走
if(x < row1&& area[x+1]
[y]!=1)
//往左走
if(x >
1&& area[x-1]
[y]!=1)
}int
main()
area[startx]
[starty]=1
;dfs()
;printf
("%d"
, ans)
;return0;
}
1 在四個方向上遞迴如果簡單寫的話,可以利用int xs[4] = ;
的方式。可有可無
2 下面這種解法從當前位置開始標記,結束條件是陣列越界(索引大於行數和列數)或者訪問到結束的結點
#include
#include
using namespace std;
int row1, row2, barrier;
int startx, starty, endx, endy;
int area[6]
[6]=
;int ans =0;
int xs[4]
=;int ys[4]
=;void
dfs(
int x = startx,
int y = starty)
area[x]
[y]=1;
for(
int i =
0; i <4;
++i)
} area[x]
[y]=0;
}int
main()
dfs();
printf
("%d"
, ans)
;return0;
}
搜尋 P1605 迷宮
迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 輸入輸出格...
P1605 迷宮 深度優先搜尋關卡
迷宮 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 輸入格式 輸入 第一...
洛谷 P1605 迷宮
問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 題目描述 輸入輸...