求捞!!
#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;
}