#11,#12错,help
  • 板块P2802 回家
  • 楼主Iamcly1
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/5/9 20:28
  • 上次更新2023/10/28 01:48:17
查看原帖
#11,#12错,help
577635
Iamcly1楼主2022/5/9 20:28
#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int ans=100000;
struct node{
	int x1;int y1;
	int t;int hp;
};
int a[10][10],vis[10][10],ans1[10][10];
queue<node>q;
int n,m;
int main() {
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			if(a[i][j]==3){
			node xt;
			xt.x1=i;xt.y1=j;xt.t=0;xt.hp=6;
			ans1[i][j]=6;
				q.push(xt);
				vis[i][j]=5;
			}
			if(a[i][j]==0){
				vis[i][j]=5;
			}
			if(a[i][j]==3){
				ans1[i][j]=1;
			}
		}
	}
	while(q.size()){
		node yt=q.front();
		q.pop();
		int xv=yt.x1,yv=yt.y1,ti=yt.t,hpo=yt.hp-1;
		if(hpo==0){
			continue;
}
		if(ti>n*m||ti>=1000000)continue;
		if(a[xv][yv]==2){
			ans=min(ans,ti);
			continue;
		}
		for(int i=0;i<4;i++){
		int nx=xv+dx[i];
		int ny=yv+dy[i];
		if(ny>m||nx>n||nx<1||ny<1||vis[nx][ny]==5){
			continue;
		}
		if(a[nx][ny]==4){
			hpo=6;
		}
		if(ans1[nx][ny]>=hpo){
			continue;
		}
		node op;
		op.x1=nx;op.y1=ny;op.t=ti+1;op.hp=hpo;ans1[nx][ny]=hpo;
		q.push(op);
	}
}
    if(ans==100000){
    	cout<<-1;
    	return 0;
    }
	cout<<ans;
}
2022/5/9 20:28
加载中...