題意:給出乙個迷宮,判斷能不能走到距離無限遠的地方
分析:本來想複製成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 而...