84pts求调
  • 板块P2802 回家
  • 楼主HCA_ac_life
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/24 20:22
  • 上次更新2024/7/24 21:20:12
查看原帖
84pts求调
1009001
HCA_ac_life楼主2024/7/24 20:22
#include<bits/stdc++.h> 
using namespace std;
struct node{
	int x,y,HP;
};
int m,n=0; 
queue<node>q;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int vis[102][102]={};
int mp[102][102]={};
int road[102][102]={};
int bfs(int x,int y,int x1,int y1){
	q.push((node){x,y,6});
	vis[x][y]=6;
	while(!q.empty()){
		node oxy=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			node nxy;
			nxy.x=oxy.x+dx[i];
			nxy.y=oxy.y+dy[i];
			if(nxy.x<1||nxy.x>n||nxy.y<1||nxy.y>m)continue;
			if(mp[nxy.x][nxy.y]==0)continue;
			if((oxy.HP-1)<=vis[nxy.x][nxy.y])continue;
			nxy.HP=oxy.HP-1;			
			if(mp[nxy.x][nxy.y]==4)nxy.HP=6;
			if(nxy.HP==0)continue;
			q.push(nxy);
			road[nxy.x][nxy.y]=road[oxy.x][oxy.y]+1;
			vis[nxy.x][nxy.y]=nxy.HP;
		} 
	}
	return road[x1][y1];
}
int main(){
	cin>>n>>m;
	int qx,qy,zx,zy;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mp[i][j];
			if(mp[i][j]==2){
				qx=i;
				qy=j;
			}
			if(mp[i][j]==3){
				zx=i;
				zy=j;
			}
		}		
	}
	int res=bfs(qx,qy,zx,zy);
	if(res==0){
		cout<<"-1";
	}else{
		cout<<res;
	}
	return 0;
}
2024/7/24 20:22
加载中...