BFS 56分求助
  • 板块P2802 回家
  • 楼主ChasonWang
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/20 09:53
  • 上次更新2024/10/20 11:41:02
查看原帖
BFS 56分求助
1251100
ChasonWang楼主2024/10/20 09:53

RT

#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,d=6;
short a[15][15],dx[]={0,0,0,1,-1},dy[]={0,1,-1,0,0};
bool v[15][15];
struct node{
	int x,y;
};
queue<node>q;
void bfs(int p,int s){
	d--;
	if(d<=0){
		cout<<-1;
		return;
	}
	for(int i=1;i<=s;i++){
		node x=q.front();
		q.pop();
		for(int j=1;j<=4;j++){
			int nx=x.x+dx[j],ny=x.y+dy[j];
			if(nx>n||ny>m||nx<1||ny<1||a[nx][ny]==0||v[nx][ny])continue;
			if(a[nx][ny]==3){
				cout<<p+1;
				return;
			}
			if(a[nx][ny]==4){
				d=6;
			}
			q.push({nx,ny});
		}
	}
	if(!q.empty())bfs(p+1,q.size());
}
int 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;
				q.push({sx,sy});
			}
		}
	}
	v[sx][sy]=1;
	bfs(0,1);
}
2024/10/20 09:53
加载中...