dalao帮忙看看吧qwq
  • 板块灌水区
  • 楼主NahX_
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/2/24 11:28
  • 上次更新2024/2/24 14:43:34
查看原帖
dalao帮忙看看吧qwq
667795
NahX_楼主2024/2/24 11:28

P7775 70pts求调

#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};
int vis[505][505];
int cnt,trex[2500],trey[2500];
int diss[505][505];int n,m;
void dist(){
	for(int i=1;i<=cnt;i++){
		for(int j=1;j<=n;j++)
			for(int k=1;k<=m;k++)
				diss[j][k]=min(diss[j][k],abs(trex[i]-j)+abs(trey[i]-k));
	}
	return ;
} 
int main(){
	memset(diss,0x3f3f,sizeof(diss));
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	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;
			}
		}
	}
	dist();
	queue<node>dl;	
	dl.push(node{qx,qy,diss[qx][qy]});
	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,diss[zx][zy]));
			continue;
		}
		for(int i=0;i<4;i++){
			int tx=t.x+dir[i][0],ty=t.y+dir[i][1];
			if(t.dis>vis[tx][ty]&&tx>=1&&tx<=n&&ty>=1&&ty<=m){
				vis[tx][ty]=t.dis;
				dl.push(node{tx,ty,min(t.dis,diss[tx][ty])});
			}
		}
	}
	
	cout<<ans; 
	return 0;
}

2024/2/24 11:28
加载中...