论我的广搜代码有多奇怪。。求捞
查看原帖
论我的广搜代码有多奇怪。。求捞
1071829
ssssbbbbbb楼主2024/6/27 09:00

求捞!!

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=300+10;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int n,a[maxn][maxn],m,w,x,y;
bool vis[maxn][maxn];
struct node{
	int x,y,step;
	node(int xx,int yy,int st){
		x=xx;
		y=yy;
		step=st;
	}
};
queue<node> q;
int bfs(){
	if(a[0][0]==-1) return 0;
	q.push(node(0,0,0));
	while(!q.empty()){
		node no=q.front();q.pop();
		for(int i=0;i<4;i++)
		{
			int dxd=x+dx[i];
			int dyd=y+dy[i];
			if(dxd>=1 && dyd>=1 && vis[dxd][dyd]==false)
			{
				if(a[dxd][dyd]==-1) return no.step+1;
				else if(a[dxd][dyd]>=no.step+1)
				{
					vis[dxd][dyd]=true;				
					q.push(node(dxd,dyd,no.step+1));
				}
			}
		}
	}return -1;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n;
	memset(a,-1,sizeof(a));
	for(int i=1;i<=n;i++){
		cin>>x>>y>>w;
		if(a[x][y]==-1) a[x][y]=w;
		else a[x][y]=min(a[x][y],w);
		for(int j=0;j<4;j++)
		{
			int dxd=x+dx[j];
			int dyd=y+dy[i];
			if(a[dxd][dyd]==-1) a[dxd][dyd]=w;
			else a[dxd][dyd]=min(a[dxd][dyd],w);
		}	
	}
	cout<<bfs();
	return 0;
}
2024/6/27 09:00
加载中...