建议降橙
查看原帖
建议降橙
565707
mediocre_楼主2023/4/5 19:31

这题纯纯 bfs,一点思维难度都没有

#include<bits/stdc++.h>
using namespace std;
const int N = 1000 + 9;
const int fx[] = {-1, 0, 0, 1};
const int fy[] = {0, -1, 1, 0};
int n, sx, sy, bx, by;
int a[N][N];
int vis[N][N];
bool use[N][N];
struct Node {
	int x, y;
};
queue <Node>q;
bool inmap(int nx, int ny) {
	return nx >= 1 && nx <= n && ny >= 1 && ny <= n;
}
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i)
	    for (int j = 1; j <= n; ++j)
	        scanf("%1d", &a[i][j]);
	scanf("%d%d%d%d", &sx, &sy, &bx, &by);
	q.push(Node{sx, sy});
	use[sx][sy] = true;
	while (!q.empty()) {
		Node u = q.front();
		q.pop();
		for (int d = 0; d < 4; ++d) {
			int nx = u.x + fx[d];
			int ny = u.y + fy[d];
			if (inmap(nx, ny) && a[nx][ny] == 0 && !use[nx][ny]) {
				vis[nx][ny] = vis[u.x][u.y] + 1;
				use[nx][ny] = true;
				q.push(Node{nx, ny});
			}
		}
	}
	printf("%d", vis[bx][by]);
	return 0;
}
2023/4/5 19:31
加载中...