社区讨论

? ? ? ? ?

P2298Mzc和男家丁的游戏参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mi85x2bo
此快照首次捕获于
2025/11/21 09:09
4 个月前
此快照最后确认于
2025/11/21 09:09
4 个月前
查看原帖
自己电脑WA了,洛谷过了,查了半天QAQ。咋回事儿
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>

using namespace std;

const int dx[4] = {1, 0,-1, 0};
const int dy[4] = {0, 1, 0,-1};

char ma[2005][2005];
int ans[2005][2005];

struct point {
	int x;
	int y;
};
queue<point> q;

int main() {
	memset(ans,-1,sizeof(ans));
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i = 1; i <= n; i++) {
		scanf("%s",ma[i] + 1);
		for(int j = 1; j <= m; j++) {
			if(ma[i][j] == 'm') {
				point cur;
				cur.x = i;
				cur.y = j;
				q.push(cur);
				ans[i][j] = 0;
			}
		}
	}
	while(!q.empty()) {
		point cur = q.front();
		for(int i = 0; i < 4; i++) {
			point a;
			a.x = cur.x + dx[i];
			a.y = cur.y + dy[i];
			if(a.x > n||a.y > m)continue;
			if(ans[a.x][a.y] == -1&&ma[a.x][a.y] != '#') {
				ans[a.x][a.y] = ans[cur.x][cur.y]+1;
				q.push(a);
			}
			if(ma[a.x][a.y] == 'd') {
				cout<<ans[a.x][a.y]<<endl;
				return 0;
			}
		}
		q.pop();
	}
	cout<<"No Way!"<<endl;
	return 0;
}

回复

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

正在加载回复...