为什么这个bfs进不去???
  • 板块题目总版
  • 楼主IAKIOI2020
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/2/11 16:19
  • 上次更新2023/10/24 01:07:32
查看原帖
为什么这个bfs进不去???
766275
IAKIOI2020楼主2023/2/11 16:19
#include<bits/stdc++.h>
using namespace std;
const int N=3e3+100;
int n,m,k,mp[N][N],nex[10],ney[10];
bool vis[N][N],a[N][N],b[N][N];
const int M=1e6+100,inf=1e9;
int mia_dis=inf,mib_dis=inf;
bool h[M];
void deal(){
	nex[1]=1,nex[2]=0,nex[3]=-1,nex[4]=0;
	ney[1]=0,ney[2]=1,ney[3]=0,ney[4]=-1;
}
int disa[N][N],disb[N][N];
struct node{int x,y,dis;};
queue<node>q;
void bbfs(int x,int y,int fl){
	cout<<'s';
	if(fl==1) q.push((node){1,1,0});
	else q.push((node){n,m,0});
	bool no[N][N];memset(no,0,sizeof(no));
	while(!q.empty()){
		node u=q.front();q.pop();
		no[u.x][u.y]=1;
		if(fl==1){
			if(vis[x][y]) a[x][y]=1,mia_dis=min(mia_dis,disa[x][y]);
		}
		else{
			if(vis[x][y]) b[x][y]=1,mib_dis=min(mib_dis,disb[x][y]);
		}
		for(int i=1;i<=4;i++){
			int dx=x+nex[i],dy=y+ney[i];
			if(dx>n||dy>m||dx<0||dy<0||mp[dx][dy]==0||no[dx][dy]) continue;	
			if(fl==1){
				disa[dx][dy]=u.dis+1;
				if(!no[dx][dy]) q.push((node){dx,dy,disa[dx][dy]});
			}
			if(fl==1){
				disb[dx][dy]=u.dis+1;
				if(!no[dx][dy]) q.push((node){dx,dy,disb[dx][dy]});
			}
		}
	}
}
int main(){
	int turn=1;
	cin>>n>>m>>k;	
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mp[i][j];
	for(int i=1,x,y;i<=k;i++){cin>>x>>y;vis[x][y]=1;}
	bbfs(1,1,1);
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j] and disa[i][j]==mia_dis) h[mp[i][j]]=1;
	bbfs(n,m,2);
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(b[i][j] and disb[i][j]==mib_dis) if(h[mp[i][j]]) turn=0;

	int ans;
	if(a[n][m]) ans=min(disa[n][m],mia_dis+mib_dis+turn);
	else ans=mia_dis+mib_dis+turn;
	cout<<ans;
}
2023/2/11 16:19
加载中...