P1363 幻象迷宮

2021-09-25 06:35:13 字數 1314 閱讀 2513

那麼,我們可以很清晰的意識到,如果可以從點(x,y)出發,達到比如(-x,y)或者(x,-y) , (-x,-y) , (x+m,y+n) [假設寬m高n] , 就可以從這個點再次達到相同的點(即可以從(x,y)出發,達到(i,j)且|i|%n=x , |j|%m=y。),一直這麼走下去。

那就搜好了。開乙個三維vis陣列第一維記錄有無被訪問,第二維記錄被訪問時橫座標,第三維縱座標。

判斷重複到達且橫縱座標不同即可。應該注意先判什麼後判什麼。如果是同乙個分矩陣走過去的話自然tx==vis[x][y][0] (此處x為|tx|%n,y為|ty|%m,即對映到中心矩陣的位置),就會被判掉。 而且注意tx!=vis[x][y][0] 和ty!=vis[x][y][1]滿足乙個即可。

沒啥好說的了。。。資料很大注意搜尋優化。

#include

#include

#include

#include

#include

#include

using

namespace std;

bool mapx[

1510][

1510]=

;int vis[

1510][

1510][

3]=;

int m,n,sx,sy,wayx[4]

=,wayy[4]

=,ans=0;

void

dfs(

int x,

int y,

int posx,

int posy)

if(vis[posx]

[posy][2

]&& vis[posx]

[posy][0

]==x && vis[posx]

[posy][1

]==y)

return

; vis[posx]

[posy][0

]=x; vis[posx]

[posy][1

]=y; vis[posx]

[posy][2

]=1;

register

int tox,toy;

for(

int w=

0;w<=

3;w++)}

intmain()

}}dfs(sx,sy,sx,sy);if

(ans)

printf

("yes\n");

else

printf

("no\n");

}return0;

}

P1363 幻象迷宮

題意 給你乙個nxm的迷宮g x,y範圍是0 n 1和0 m 1 不能走,可以走,s 作為起點,現在將迷宮擴充套件成無窮大,擴充套件方法是 任意乙個 x,y 位置的字元c g x n,y m 現在問你可不可以從起點處走到無窮遠處。例子 原始迷宮5x5為中間的黃色區域,標紅色的位置的座標為 2,4 而...

洛谷P1363 幻象迷宮

題意 給出乙個迷宮,判斷能不能走到距離無限遠的地方 分析 本來想複製成3 3的圖然後走的,但是空間有點困難。後面改成了2 2的圖,不過我開了3 3的圖的空間還是過了。解法 dfs include include define re register using namespace std const...

洛谷P1363幻象迷宮

幻象迷宮可以認為是無限大的,不過它由若干個n m的矩陣重複組成。矩陣中有的地方是道路,用 表示 有的地方是牆,用 表示。lhx和wd所在的位置用 s 表示。也就是對於迷宮中的乙個點 x,y 如果 x mod n,y mod m 是 或者 s 那麼這個地方是道路 如果 x mod n,y mod m ...