P5195 40pts 求调
  • 板块学术版
  • 楼主Tachibana27
  • 当前回复17
  • 已保存回复17
  • 发布时间2023/9/11 16:47
  • 上次更新2023/11/2 21:20:03
查看原帖
P5195 40pts 求调
663199
Tachibana27楼主2023/9/11 16:47

code:

#include<bits/stdc++.h>

using namespace std;

inline int read(){

   	int s=0;

   	int w=1;

   	char ch=getchar();

   	for(;ch<'0'||ch>'9';ch=getchar())

    	if(ch=='-')

			w=-1;

   	for(;ch>='0'&&ch<='9';ch=getchar())

		s=s*10+ch-'0';

   	return s*w;

}

int n,m;

int x,y;

int a[1086][1086];

struct node{
	
	int x;
	
	int y;
	
	int t;
	
};

queue<node>q;

int dx[]{0,0,1,0,-1};

int dy[]{0,1,0,-1,0};

bool vis[1086][1086];

int bfs2(int x,int y,int t){
	
	memset(vis,0,sizeof vis);
	
	while(!q.empty())
	
		q.pop();
		
	q.push({x,y,t});
	
	while(!q.empty()){
		
		int xx=q.front().x;
		
		int yy=q.front().y;
		
		int tt=q.front().t;
		
		q.pop();
		
		if(a[xx][yy]==3)
			
			return tt;
		
		for(int i=1;i<=4;i++){
			
			if(xx+dx[i]<=0||xx+dx[i]>n||yy+dy[i]<=0||yy+dy[i]>m||vis[xx+dx[i]][yy+dy[i]]||a[xx+dx[i]][yy+dy[i]]==1)
			
				continue;
				
			q.push({xx+dx[i],yy+dy[i],tt+1});
			
			vis[xx+dx[i]][yy+dy[i]]=true;
			
		}
		
	}
	
}

int bfs(int x,int y,int t){
	
	q.push({x,y,t});
	
	while(!q.empty()){
		
		int xx=q.front().x;
		
		int yy=q.front().y;
		
		int tt=q.front().t;
		
		q.pop();
		
		if(a[xx][yy]==4)
			
			return bfs2(xx,yy,tt);
		
		for(int i=1;i<=4;i++){
			
			if(xx+dx[i]<=0||xx+dx[i]>n||yy+dy[i]<=0||yy+dy[i]>m||vis[xx+dx[i]][yy+dy[i]]||a[xx+dx[i]][yy+dy[i]]==1)
			
				continue;
				
			q.push({xx+dx[i],yy+dy[i],tt+1});
			
			vis[xx+dx[i]][yy+dy[i]]=true;
			
		}
		
	}
	
}

int main(){
	
	m=read();
	
	n=read();
	
	for(int i=1;i<=n;i++)
	
		for(int j=1;j<=m;j++){
		
			a[i][j]=read();
			
			if(a[i][j]==2){
			
				x=i;
				
				y=j;
				
			}
			
		}
	
	cout<<bfs(x,y,0);
	
	return 0;
	
}

测评情况

悬2关

2023/9/11 16:47
加载中...