全WA求助
查看原帖
全WA求助
666682
songsonghui楼主2022/3/2 16:18
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;

typedef pair<int,int> p;
int map[505][505];
bool visited[505][505];
p team[100005];
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int n,m,a,b;
queue<p> q;
bool check(int x,int y,int step){
	if(x<1||x>n||y<1||y>m) return false;
	if((map[x][y]>= step + 1) && visited[x][y]) return false;
	if(visited[x][y]) return false;
	return true;
}
int main(int argc, char** argv) {
	memset(map,0,sizeof(map));
	int x,y;
	scanf("%d%d%d%d",&n,&m,&a,&b);
	for(int i = 0;i<a;i++){
		scanf("%d %d",&x,&y);
		q.push(make_pair(x,y));
	}
	for(int i = 0;i<b;i++){
		scanf("%d %d",&x,&y);
		team[i] = make_pair(x,y);
	}
	while(!q.empty()){
		p top =q.front();
		q.pop();
		int x = top.first,y = top.second;
		for(int i =0;i<4;i++){
			if(check(x+ dx[i],y+dy[i],map[x][y])){
				q.push(make_pair(x+ dx[i],y+dy[i]));
				map[x+ dx[i]][y+dy[i]]=map[x][y]+1;
				visited[x+ dx[i]][y+dy[i]] =true;
			}
		}
//		for(int i = 1;i<=n;i++){
//			for(int j =1;j<=m;j++) printf("%d ",map[i][j]);
//			printf("\n");
//		}
//		printf("\n");
	}
	
	for(int i= 0;i<b;i++){
		int x = team[i].first,y =team[i].second;
		printf("%d\n",map[x][y]);
	}
	return 0;
}
2022/3/2 16:18
加载中...