先貼題目。
time limit:1000ms memory limit:65535k
題型: 程式設計題 語言: 無限制
描述有乙個n*m(n,m<=10)的格仔迷宮,1代表該格仔為牆,不能通過,0代表可以通過,人在迷宮中可以嘗試上下左右四個方向移動。
另外,在迷宮中如果從左邊走出迷宮會回到迷宮最右邊一格(只要該格不是牆),行不變,同樣,從右邊走出迷宮會
回到迷宮最左邊一格,向上走出迷宮會回到迷宮最下邊一格,向下走出迷宮會回到迷宮最上邊一格。
現在給定乙個迷宮,以及起點和終點,問最少多少步可以走出迷宮。如果不能走出迷宮輸出「die」。
該程式為多case,第1行為case的數量
每乙個case,第1行為兩個數n(行)和m(列)
然後n行每行m個數,之後是起點座標和終點座標sc(行) sr(列) ec(行) er(列)如題2
4 3011
010110
1100 0 3 2
2 201
100 0 1 1
4die
提示
第乙個case,可以從(1,0)走到(1,2)
作者 admin
我是分割線
這道題跟經典的走迷宮不同之處就在於可以從一段到另一端探索,因此我們可以針對這個情況特判和特殊處理。每探索一次,我們就對探索的點進行判斷,判斷是否是越界,即行走到了負一或n,或者列走到了負一或m。如果走到了這種情況,那麼我們就可以具體寫出入隊元素了。
#include
#include
using
namespace std;
int dx[4]
=,dy[4]
=;struct node
;int v[
110]
[110];
char a[
110]
[110];
int n,m;
//行和列
//doors door[110];//宣告傳送門
node in,out;
//宣告起點和終點
intbfs
(int x,
int y)
;while
(f!=r)
else
for(
int i=
0;i<
4;i++);
v[n-1]
[cy]
=v[temp.x]
[temp.y]+1
;}else
if(cx==n&&v[0]
[cy]==0
&&a[0]
[cy]
=='0'
)//下
; v[0]
[cy]
=v[temp.x]
[temp.y]+1
;}else
if(cy==-1
&&v[cx]
[m-1]==
0&&a[cx]
[m-1]==
'0')
//左;
v[cx]
[m-1
]=v[temp.x]
[temp.y]+1
;}else
if(cy==m&&v[cx][0
]==0&&a[cx][0
]=='0')
//右
; v[cx][0
]=v[temp.x]
[temp.y]+1
;}else
if(cx>=
0&&cx=
0&&cy[cy]==0
&&a[cx]
[cy]
=='0'
)//沒有超出邊界
; v[cx]
[cy]
=v[temp.x]
[temp.y]+1
;}}}
return0;
}int
main()
}return0;
}
走迷宮(佇列 廣搜 傳送門)
時間限制 1000ms 長度限制 10kb 提交次數 0 通過次數 0 題型 程式設計題 語言 g gcc vc description 有乙個n m的格仔迷宮,1代表該格仔為牆,不能通過,0代表可以通過,另外,在迷宮中 有一些傳送門,走到傳送門的入口即會自動被傳送到傳送門的出口 一次傳送算1步 人...
bfs佇列的演算法,走迷宮
problem description 有乙個二維迷宮,n行m列,s 表示迷宮的起點,t 表示迷宮的終點,表示圍牆,表示通路。現在從s出發,你不能穿牆,問到達終點t最少需要多少步?輸入格式 第一行輸入n,m 1 n,m 50 表示迷宮的行列大小。接下來輸入n行字串表示迷宮。輸出格式 乙個整數,表示走...
走迷宮(廣搜路徑記錄(路徑唯一))
題目 給乙個5 5的矩陣模擬迷宮,0代表可以走的格仔,1代表牆壁,只有0和1並且入口為左上角,出口為右下角,找出從入口到出口的最短路徑,測試資料的最短路徑唯一 並按座標形式輸出,x,y x代表從上到下第幾行 從零開始 y代表從左到右第幾列 從零開始 include include include u...