走迷宮2(邊界跳躍 佇列 廣搜)

2021-10-05 00:06:31 字數 2027 閱讀 2908

先貼題目。

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...