傳送門
(喵星人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就只好啟動城堡的毀滅程式了......當然不到萬不得已,他不想這麼做。。。
輸入包含多組資料,以eof結尾。
每組資料的第一行是兩個整數n、m。
接下來是乙個n*m的字元矩陣,表示迷宮裡(0,0)到(n-1,m-1)這個矩陣單元。
對於每組資料,輸出乙個字串,yes或者no。
5 4
##.#
##s#
#..#
#.##
#..#
5 4##.#
##s#
#..#
..#.
#.##
yes
no
對於30%的資料,n,m<=20
對於50%的資料,n.m<=100.
對於100%的資料,n,m<=1500,每個測試點不超過10組資料.
本題思路:將地圖拓展,記錄對於乙個單位地圖的相對位置x, y和記錄整個拓展地圖的絕對位置ux,uy。
顯然如果第一次走過這個位置,x = ux且y = uy,那麼如果x != ux 或者 y != uy,說明當前點被走了第二遍,那麼這就意味著可以無限走下去。
最近備考,沒時間寫詳細題解了,寫個大概思路就行了。
/*
* @author: crab-in-the-northeast
* @date: 2020-09-26 21:03:11
* @last modified by: crab-in-the-northeast
* @last modified time: 2020-09-30 18:59:31
*/#include #include #include const int maxn = 1505;
const int dx = ;
const int dy = ;
char a[maxn][maxn];
bool vis[maxn][maxn];
int visu[maxn][maxn][2];
bool fnd;
int n, m;
void dfs(int x, int y, int ux, int uy)
vis[x][y] = true;
visu[x][y][0] = ux;
visu[x][y][1] = uy;
for (int i = 1; i <= 4; ++i)
}int main()
}dfs(sx, sy, sx, sy);
std :: printf("%s\n", fnd ? "yes" : "no");
}return 0;
}
評測記錄 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 而...
洛谷P1363 幻象迷宮
題意 給出乙個迷宮,判斷能不能走到距離無限遠的地方 分析 本來想複製成3 3的圖然後走的,但是空間有點困難。後面改成了2 2的圖,不過我開了3 3的圖的空間還是過了。解法 dfs include include define re register using namespace std const...