日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【dfs】无穷迷宫(jzoj 3924)

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【dfs】无穷迷宫(jzoj 3924) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

無窮迷宮

jzoj 3924

題目大意

有一個n*m的迷宮,有墻(#),路(.),和你的位置(S),這個迷宮會復制無數份拼在一起,問你能不能不停地走下去

輸入樣例

2 5 4 ##.# ##S# #..# #.## #..# 5 4 ##.# ##S# #..# ..#. #.##

輸出樣例

Yes No

樣例解釋

第一組測試數據中,機器人不斷沿著路徑向上走即可。
第二組測試數據中,機器人無論向哪個方向走都會是死路。

數據范圍

50% 的數據:1?N,M?50.1 \leqslant N, M \leqslant 50.1?N,M?50.
100% 的數據:1?N,M?1500,1?T?4.1 \leqslant N, M \leqslant 1500,1 \leqslant T \leqslant 4.1?N,M?15001?T?4.

解題思路

因為我們不能嘗試不停的走下去,那我們想一下:
如果我們能做到不同迷宮的同一位置,那我們就可以用同樣的方式再走到另一個迷宮的同一位置,那就是可以無限得走下去
那我們dfs時,保存在迷宮內的位置,也要保存對于第一個迷宮的位置,這樣就可以判斷是不是不同迷宮的統一個位置

代碼

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; int t, n, m, x, y, ans, f[2000][2000][5]; char a[2000][2000]; const int dx[4] = {1, 0, -1, 0}; const int dy[4] = {0, 1, 0, -1}; int sx(int x) {return (x + n - 1) % n + 1; } int sy(int y) {return (y + m - 1) % m + 1; } void dfs(int x, int y, int lx, int ly)//xy是%了的lxly是沒%的 {if (f[x][y][0] && (f[x][y][1] != lx || f[x][y][2] != ly))//之前是否在別的迷宮到過這個位置{ans = 1;return;}f[x][y][0] = 1;f[x][y][1] = lx;f[x][y][2] = ly;for (int i = 0; i < 4 && !ans; ++i)if (a[sx(x + dx[i])][sy(y + dy[i])] != '#' && (!f[sx(x + dx[i])][sy(y + dy[i])][0] || f[sx(x + dx[i])][sy(y + dy[i])][1] != lx + dx[i] || f[sx(x + dx[i])][sy(y + dy[i])][2] != ly + dy[i]))//不是同一個迷宮,或沒到過且不是墻dfs(sx(x + dx[i]), sy(y + dy[i]), lx + dx[i], ly + dy[i]); } int main() {scanf("%d", &t);while(t--){memset(f, 0, sizeof(f));ans = 0;scanf("%d %d", &n, &m);for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j){cin>>a[i][j];if (a[i][j] == 'S')x = i, y = j;}dfs(x, y, x, y);if (ans) printf("Yes\n");else printf("No\n");}return 0; }

總結

以上是生活随笔為你收集整理的【dfs】无穷迷宫(jzoj 3924)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。