大佬求调!!!样例能过但是0分
查看原帖
大佬求调!!!样例能过但是0分
701120
mab123456楼主2025/1/25 15:57
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,a,b;int zx,zy;
int g[505][505],ans[505][505];
bool c[505][505];
int cx[N],cy[N],dx[4]={-1,0,0,1},dy[4]={0,1,-1,0};
void bfs(int x,int y)
{
	queue<pair<int,int> >q;
	c[x][y]=1;
	ans[x][y]=0;
	q.push({x,y});
	while(!q.empty())
	{
		pair<int,int>p=q.front();
		q.pop();
		for(int i=0;i<4;i++)
		{
			int xx=p.first+dx[i],yy=p.second+dy[i];
			if(xx<1||xx>n||yy<1||yy>m)
			continue;
			if(c[xx][yy]==0)
			{
				if(ans[xx][yy]==0)
				ans[xx][yy]=ans[p.first][p.second]+1;
				else
				ans[xx][yy]=min(ans[p.first][p.second]+1,ans[xx][yy]);
				c[xx][yy]=1;
				q.push({xx,yy});
			}
		}
	}
}
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m>>a>>b;
	for(int i=1;i<=a;i++)
	{
		cin>>cx[i]>>cy[i];
	}
	for(int i=1;i<=a;i++)
	{
		memset(c,0,sizeof(c));
		bfs(cx[i],cy[i]);
	}
	for(int i=1;i<=b;i++)
	{
		int zx,zy;
		cin>>zx>>zy;
		cout<<ans[zx][zy]<<endl;
	}
	return 0;
 } 
2025/1/25 15:57
加载中...