洛谷 P1363 幻想迷宮 解題報告

2022-04-30 04:33:11 字數 1607 閱讀 3259

背景 background

(喵星人lhx和wd同心協力擊退了汪星人的入侵,不幸的是,汪星人撤退之前給它們製造了一片幻象迷宮。)

wd:嗚嗚,腫麼辦啊……

lhx:momo...我們一定能走出去的!

wd:嗯,+u+u!

描述 description

幻象迷宮可以認為是無限大的,不過它由若干個n*m的矩陣重複組成。矩陣中有的地方是道路,用'.'表示;有的地方是牆,用'#'表示。lhx和wd所在的位置用's'表示。也就是對於迷宮中的乙個點(x,y),如果(x mod n,y mod m)是'.'或者's',那麼這個地方是道路;如果(x mod n,y mod m)是'#',那麼這個地方是牆。lhx和wd可以向上下左右四個方向移動,當然不能移動到牆上。

請你告訴lhx和wd,它們能否走出幻象迷宮(如果它們能走到距離起點無限遠處,就認為能走出去)。如果不能的話,lhx就只好啟動城堡的毀滅程式了……當然不到萬不得已,他不想這麼做。。。

輸入格式 inputformat

輸入包含多組資料,以eof結尾。

每組資料的第一行是兩個整數n、m。

接下來是乙個n*m的字元矩陣,表示迷宮裡(0,0)到(n-1,m-1)這個矩陣單元。

輸出格式 outputformat

對於每組資料,輸出乙個字串,yes或者no。

資料範圍和注釋 hint

對於30%的資料,n,m<=20

對於50%的資料,n.m<=100.

對於100%的資料,n,m<=1500,每個測試點不超過10組資料.

神仙題。。

我們考慮怎麼才算可以走無窮

我一開始的想法是找到把連通塊求出來,然後通過邊界之間的連線以連通塊為點建立無向圖,看看起點在的連通塊有沒有與乙個環連線

然後我就涼了

比如這個

#.#.#

..#..

#####

.s#..

#.#.#

好吧我不是很懂於是去看題解了

結果是某乙個點可以走到它在別的圖的它自己就行,但走到它自己圖上的它自己就不行。

好像是那麼回事呢。

然後我們用一種比較神仙的方法記錄

\(used[i][j][0/1/2]\)前兩維普通的used陣列,後一位0表示可達,1表示上一次走到這個點的\(x\)座標,2表示上一次走到這個點的\(y\)座標

注意下標\(i,j\)儲存的是座標對原圖的對映,而後面表示的是真實座標

\(dfs\)時代入四個引數分別表示當前座標對映和當前實際座標

code:

#include #include const int n=1502;

char g[n][n];

int used[n][n][3],n,m,sx,sy,flag;

const int dx[5]=;

const int dy[5]=;

void dfs(int x,int y,int qx,int qy)

}void work()

{ flag=0;

memset(used,0,sizeof(used));

for(int i=0;i2018.7.27

洛谷P1363 幻想迷宮

背景 background 喵星人lhx和wd同心協力擊退了汪星人的入侵,不幸的是,汪星人撤退之前給它們製造了一片幻象迷宮。wd 嗚嗚,腫麼辦啊 lhx momo.我們一定能走出去的!wd 嗯,u u!描述 description 幻象迷宮可以認為是無限大的,不過它由若干個n m的矩陣重複組成。矩陣...

洛谷P1363 幻想迷宮

背景 background 喵星人lhx和wd同心協力擊退了汪星人的入侵,不幸的是,汪星人撤退之前給它們製造了一片幻象迷宮。wd 嗚嗚,腫麼辦啊 lhx momo 我們一定能走出去的!wd 嗯,u u!描述 description 幻象迷宮可以認為是無限大的,不過它由若干個n m的矩陣重複組成。矩陣...

洛谷 P1363 幻想迷宮

背景 background 喵星人lhx和wd同心協力擊退了汪星人的入侵,不幸的是,汪星人撤退之前給它們製造了一片幻象迷宮。wd 嗚嗚,腫麼辦啊 lhx momo.我們一定能走出去的!wd 嗯,u u!描述 description 幻象迷宮可以認為是無限大的,不過它由若干個n m的矩陣重複組成。矩陣...