WA求助[悬关]
  • 板块P2802 回家
  • 楼主fanjiajun_U
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/5/19 14:21
  • 上次更新2024/5/19 16:36:39
查看原帖
WA求助[悬关]
1060965
fanjiajun_U楼主2024/5/19 14:21
#include<bits/stdc++.h>
using namespace std;
int m,n;
struct node{
	int x;
	int y;
};
int a[15][15];
int vis[15][15];
int ans[15][15];
int ex[15][15];
const int dx[5]={0,1,-1,0,0};
const int dy[5]={0,0,0,1,-1};
queue <node>q;
int sx,sy;
int hx,hy;
int x,y,tx,ty;
int bfs(){
	q.push((node){sx,sy});
	vis[sx][sy]=1;
	while(!q.empty()){
		x=q.front().x;
		y=q.front().y;
		q.pop();
		if(x==hx&&y==hy){
			return ans[x][y];
		}
		if(ex[x][y]==1) return -1;
		for(int i=1;i<=4;i++){
			tx=x+dx[i];
			ty=y+dy[i];
			if(tx<=0||tx>n||ty<=0||ty>m) continue;
			if(a[tx][ty]==0||vis[tx][ty]==1) continue;
			ex[tx][ty]=ex[x][y]-1;
			if(a[tx][ty]==4) ex[tx][ty]=6;
            ans[tx][ty]=ans[x][y]+1;
			vis[tx][ty]=1;
			q.push((node){tx,ty});
		}
	}
	return -1;
}
int main() {
	scanf("%d",&n);
    scanf("%d",&m);
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
      		int x;
      		scanf("%d",&x);
      		a[i][j]=x;
      		if(x==2){
        		sx=i,sy=j;
      		}else if(x==3){
        		hx=i,hy=j;
        	}
        }
    }
    ex[sx][sy]=6;
    printf("%d",bfs());
}
2024/5/19 14:21
加载中...