一组分(64分)求条!!!!
  • 板块P2802 回家
  • 楼主wmz1
  • 当前回复3
  • 已保存回复4
  • 发布时间2025/8/5 15:49
  • 上次更新2025/8/5 18:46:26
查看原帖
一组分(64分)求条!!!!
1790951
wmz1楼主2025/8/5 15:49
#include<bits/stdc++.h>
using namespace std;
int r,c;
char a[10000][10000];
char b[10000][10000];
int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int vis[10000][10000];
struct node{
    int x;
    int y;
    int step;
    int HP;
} q[10000010];
void bfs(int sx,int sy,int ex,int ey){
    int head=1;
    int tail=1;
    q[tail].step=0;
    q[tail].x=sx;
    q[tail].y=sy;
    q[tail].HP=6;
    vis[sx][sy]=1;
    tail++;
    while(head<tail){
        int x0=q[head].x;
        int y0=q[head].y;
        int step =q[head].step;
        int HP=q[head].HP;
        head++;
        if(x0==ex && y0==ey){
            cout<<step;
            return;
        }
        for(int i=0;i<4;i++){
            int nx=x0+d[i][0];
            int ny=y0+d[i][1];
            
            if(nx>=0 && ny>=0 && nx<r && ny<c && a[nx][ny]!='0' && vis[nx][ny]==0 && HP>0){
            	if(a[nx][ny]=='4'){
            		q[tail].x=nx;
	                q[tail].y=ny;
	                q[tail].step=step+1;
	                q[tail].HP=6;
	                vis[nx][ny]=1;
	                tail++;
				}else{
					q[tail].x=nx;
	                q[tail].y=ny;
	                q[tail].step=step+1;
	                vis[nx][ny]=1;
	                q[tail].HP=HP-1;
	                tail++;
				}
            }
        }
    }
    cout<<-1;
}
int main(){
    cin>>r>>c;
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            cin>>a[i][j];
            b[i][j]=a[i][j];
        }
    }
    int ec;
    int er;
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            if(a[i][j]=='3'){
                ec=i;
                er=j;
			}
        }
    }
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            if(a[i][j]=='2'){
            	bfs(i,j,ec,er);
            	return 0;
			}
        }
    }
    return 0;
}

2025/8/5 15:49
加载中...