蒟蒻求助神犇调试
  • 板块P2802 回家
  • 楼主QAQ_liu
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/5 00:44
  • 上次更新2024/10/5 10:21:18
查看原帖
蒟蒻求助神犇调试
1032871
QAQ_liu楼主2024/10/5 00:44
#include<bits/stdc++.h>
using namespace std;
int n,m,sum,d[5][2]={{1,0},{0,1},{-1,0},{0,-1}},a[1005][1005],sx,sy,ex,ey,f=1;
bool vis[1005][1005];
struct node{
	int x,y,id,step;
};
queue<node> Q;
void bfs(){
	while(!Q.empty()){
		node q=Q.front();
		Q.pop();
		for(int i=0;i<4;i++){
			int nx=q.x+d[i][0],ny=q.y+d[i][1],nid=q.id,nstep=q.step;
			if(nx==ex&&ny==ey&&q.id>0) return;
			if(q.id==0){
				f=0;
				return;
			}
			if(nx>n||ny>n||nx<1||ny<1||a[nx][ny]==0||vis[nx][ny]==1) continue;
			vis[nx][ny]=1;
			if(a[nx][ny]==4) Q.push({nx,ny,nid,nstep+1});
			Q.push({nx,ny,nid-1,nstep+1});
			sum++;
		}
	}
}
signed main(){
	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]==2){
				sx=i;
				sy=j;
			}
			if(a[i][j]==3){
				ex=i;
				ey=j;
			}
		}
	}
	Q.push({sx,sy,6,1});
	vis[sx][sy]=1;
	bfs();
	if(f) cout<<sum;
	else cout<<-1;
    return 0;
}
2024/10/5 00:44
加载中...