社区讨论

求调,实在找不到错误在哪了

P1363幻象迷宫参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjtswf9
此快照首次捕获于
2025/11/04 08:23
4 个月前
此快照最后确认于
2025/11/04 08:23
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1505;
int n, m, bex, bey;
char a[N][N];



int dx[4] = {0, 0, -1, 1}, dy[4] = {-1, 1, 0, 0};
bool vis[N][N][3];
bool key;

void dfs(int x, int y, int rex, int rey) {
//	if (key)
//		return ;
	int nowx = (x % n + n) % n, nowy = (y % m + m) % m;

	if (a[nowx][nowy] == '#')
		return ;

	if (vis[nowx][nowy][0]) {
		if (rex != vis[nowx][nowy][1] || rey != vis[nowx][nowy][2]) {
			key = 1;
		}

		return ;
	}

	vis[nowx][nowy][0] = 1;
	vis[nowx][nowy][1] = rex;
	vis[nowx][nowy][2] = rey;

	for (int i = 0; i < 4; i++) {

		dfs(x + dx[i], y + dy[i], rex + dx[i], rey + dy[i]);

		if (key)
			return ;
	}
}

int main() {
	while (cin >> n >> m) {
		memset(vis, 0, sizeof(vis));
		memset(a, 0, sizeof(a));
		key = 0;

		for (int i = 0; i < n ; i++) {

			string b;
			cin >> b;

			for (int j = 0; j < m ; j++) {

				a[i][j] = b[j];

				if (b[j] == 'S') {
					bex = i;
					bey = j;
				}
			}
		}

		dfs(bex, bey, bex, bey);

		cout << (key ? "Yes" : "No") << endl;
	}

	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...