time limit: 1000ms memory limit: 65536k
有乙個m*n格的迷宮(表示有m行、n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,輸入這m*n個資料和起始點、結束點(起始點和結束點都是用兩個資料來描述的,分別表示這個點的行號和列號)。現在要你程式設計找出所有可行的道路,要求所走的路中沒有重複的點,走時只能是上下左右四個方向。如果一條路都不可行,則輸出相應資訊(用-1表示無路)。
第一行是兩個數m,n(1< m, n< 15),接下來是m行n列由1和0組成的資料,最後兩行是起始點和結束點。
所有可行的路徑,輸出時按照左上右下的順序。描述乙個點時用(x,y)的形式,除開始點外,其他的都要用「->」表示。如果沒有一條可行的路則輸出-1。
5 41 1 0 0
1 1 1 1
0 1 1 0
1 1 0 1
1 1 1 1
1 15 4
(1,1)->(1,2)->(2,2)->(2,3)->(3,3)->(3,2)->(4,2)->(4,1)->(5,1)->(5,2)->(5,3)->(5,4)(1,1)->(1,2)->(2,2)->(2,3)->(3,3)->(3,2)->(4,2)->(5,2)->(5,3)->(5,4)
(1,1)->(1,2)->(2,2)->(3,2)->(4,2)->(4,1)->(5,1)->(5,2)->(5,3)->(5,4)
(1,1)->(1,2)->(2,2)->(3,2)->(4,2)->(5,2)->(5,3)->(5,4)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,2)->(4,2)->(4,1)->(5,1)->(5,2)->(5,3)->(5,4)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,2)->(4,2)->(5,2)->(5,3)->(5,4)
(1,1)->(2,1)->(2,2)->(3,2)->(4,2)->(4,1)->(5,1)->(5,2)->(5,3)->(5,4)
(1,1)->(2,1)->(2,2)->(3,2)->(4,2)->(5,2)->(5,3)->(5,4)
深搜+模擬,注意當前遞迴棧的visited標誌使用過後要重置回來,還有要注意題目中「左上右下的順序」...
#include //#include
using
namespace
std;
const
int maxn = 16
;const
int devide = 100
;int
maze[maxn][maxn];
int queue[maxn*maxn];
intvisited[maxn][maxn];
intm,n,r,s;
intflag;
void dfs(const
int& x,const
int& y,const
int&depth)
cout
<<"("
<","
<")"
<}
else
if(p - 1 > 0 && maze[p-1][q] && !visited[p-1
][q])
if(q + 1
<= n && maze[p][q+1] && !visited[p][q+1
])
if(p + 1
<= m && maze[p+1][q] && !visited[p+1
][q])
}}int
main()
SDUT 動態規劃 走迷宮 1269
走迷宮 pblem description 有乙個mn格的迷宮 表示有m行 n列 其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,輸入這mn個資料和起始點 結束點 起始點和結束點都是用兩個資料來描述的,分別表示這個點的行號和列號 現在要你程式設計找出所有可行的道路,要求所走的路中沒有重...
機械人走迷宮 SDUT1590 ACM演算法設計
time limit 1000ms memory limit 32768k 迷宮對大家來說肯定是很熟悉的東西了,多數人都知道要想走出迷宮,在裡面亂猜肯定是不行的,比較好的方法是貼著牆的一側走,比如只貼著右側走,最後肯定會走出迷宮,但不能保證要走多久,可能出口盡在咫尺你卻錯過了。機械人只聽從人的命令或...
SDUT 2449 走迷宮(深度優先搜尋)
資料結構實驗之棧與佇列十 走迷宮 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 乙個由n m 個格仔組成的迷宮,起點是 1,1 終點是 n,m 每次可以向上下左右四個方向任...