洛谷P1363 幻象迷宮

2022-09-07 10:42:11 字數 999 閱讀 3704

題意:給出乙個迷宮,判斷能不能走到距離無限遠的地方

分析:本來想複製成3*3的圖然後走的,但是空間有點困難。後面改成了2*2的圖,不過我開了3*3的圖的空間還是過了。

解法:dfs

#include#include

#define re register

using

namespace

std;

const

int max=1500+5

;bool map[max*3][max*3],vis[max*3][max*3

],scc;

intn,m,bx,by;

void dfs(int x,int

y);int

main()

}scc=0

; dfs(bx,by);

if(scc)

cout

<<"

yes"

cout

<<"no"

<}

return0;

}void dfs(int x,int

y) vis[x][y]=1

;

if(map[(x+1+2*n)%(2*n)][y]&&(!vis[(x+1+2*n)%(2*n)][y]))

dfs((x+1+2*n)%(2*n),y);

if(map[(x-1+2*n)%(2*n)][y]&&(!vis[(x-1+2*n)%(2*n)][y]))

dfs((x-1+2*n)%(2*n),y);

if(map[x][(y+1+2*m)%(2*m)]&&(!vis[x][(y+1+2*m)%(2*m)]))

dfs(x,(y+1+2*m)%(2*m));

if(map[x][(y-1+2*m)%(2*m)]&&(!vis[x][(y-1+2*m)%(2*m)]))

dfs(x,(y-1+2*m)%(2*m));

}

洛谷P1363幻象迷宮

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

P1363 幻象迷宮

那麼,我們可以很清晰的意識到,如果可以從點 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陣列第一維記錄有無被訪問,第二...

P1363 幻象迷宮

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