P7775 10pts求助qwq
  • 板块灌水区
  • 楼主NahX_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/23 22:11
  • 上次更新2024/2/24 09:33:01
查看原帖
P7775 10pts求助qwq
667795
NahX_楼主2024/2/23 22:11

P7775

bfs样例全过

#include<bits/stdc++.h>
using namespace std;
char a[505][505];
struct node{
	int x,y,dis;
};
int dir[4][2]={1,0,-1,0,0,1,0,-1};
bool vis[505][505];
int cnt,trex[2500],trey[2500];
int dist(int x,int y){
	int d=INT_MAX;
	for(int i=1;i<=cnt;i++){
		d=min(d,abs(trex[i]-x)+abs(trey[i]-y));
	}
	return d;
} 
int main(){
	int n,m;cin>>n>>m;
	int qx=0,qy=0,zx=0,zy=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>a[i][j]; 
			if(a[i][j]=='V')qx=i,qy=j;
			else if(a[i][j]=='J')zx=i,zy=j;
			else if(a[i][j]=='+')trex[++cnt]=i,trey[cnt]=j;
		}
	queue<node>dl;
	int d=dist(qx,qy);	
	dl.push(node{qx,qy,d});
	vis[qx][qy]=1;
	int ans=INT_MIN;
	while(!dl.empty()){
		node t;t=dl.front();
        dl.pop();
		if(t.x==zx&&t.y==zy){
			ans=max(ans,min(t.dis,dist(zx,zy)));
	       continue;
		}
		vis[t.x][t.y]=1;
		
		for(int i=0;i<4;i++){
			int tx=t.x+dir[i][0],ty=t.y+dir[i][1];
			if(!vis[tx][ty]&&tx>=1&&tx<=n&&ty>=1&&ty<=m){
				vis[tx][ty]=1;
				int d=dist(tx,ty);
				dl.push(node{tx,ty,min(d,t.dis)});//
			}
		}
	}
	
	cout<<ans; 
	return 0;
}

2024/2/23 22:11
加载中...