zty_luogu @ 2021-08-05 23:44:27
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define f(III,MMM,NNN) for(int III=MMM;III<=NNN;III++)
typedef long long int ll;
const int N=1010;
const int dx[]={0,1,-1,0,0},
dy[]={0,0,0,1,-1};
int t[2010][2010]={};
int bfs[1000010][3]={};//x,y,时间
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
memset(t,127,sizeof(t));
for(int i=1;i<=n;i++)
{
int x,y,tm;
cin>>x>>y>>tm;
if(t[x][y]==2139062143||tm<t[x][y])
t[x][y]=tm;
for(int j=1;j<=4;j++){
int xx=x+dx[j];
int yy=y+dy[j];
if(xx>=0&&yy>=0&&x<=305&&yy<=305&&(t[xx][yy]==2139062143||tm<t[xx][yy]))
t[xx][yy]=tm;
}
}
// for(int i=0;i<=10;i++){
// for(int j=0;j<=10;j++){
// if(t[i][j]==2139062143)
// cout<<"- ";
// else
// cout<<t[i][j]<<' ';
// }
// cout<<endl;
// }
bfs[1][0]=0,bfs[1][1]=0,bfs[1][2]=0;
int l=0,r=1;
while(l<=r){
l++;
for(int i=1;i<=4;i++){
int xx=bfs[l][0]+dx[i];
int yy=bfs[l][1]+dy[i];
int tt=bfs[l][2]+1;
if(xx>=0&&yy>=0&&xx<=305&&yy<=305&&tt<t[xx][yy]){
r++;
bfs[r][0]=xx;
bfs[r][1]=yy;
bfs[r][2]=tt;
if(t[xx][yy]==2139062143){
// cout<<xx<<yy;
cout<<bfs[r][2];
return 0;
}
}
}
}
cout<<-1;
return 0;
}
by zty_luogu @ 2021-08-05 23:47:26
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define f(III,MMM,NNN) for(int III=MMM;III<=NNN;III++)
typedef long long int ll;
const int N=1010;
const int dx[]={0,1,-1,0,0},
dy[]={0,0,0,1,-1};
int t[2010][2010]={};
int bfs[1000010][3]={};//x,y,时间
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
memset(t,127,sizeof(t));
for(int i=1;i<=n;i++)
{
int x,y,tm;
cin>>x>>y>>tm;
if(t[x][y]==2139062143||tm<t[x][y])
t[x][y]=tm;
for(int j=1;j<=4;j++){
int xx=x+dx[j];
int yy=y+dy[j];
if(xx>=0&&yy>=0&&xx<=305&&yy<=305&&(t[xx][yy]==2139062143||tm<t[xx][yy]))
t[xx][yy]=tm;
}
}
// for(int i=0;i<=10;i++){
// for(int j=0;j<=10;j++){
// if(t[i][j]==2139062143)
// cout<<"- ";
// else
// cout<<t[i][j]<<' ';
// }
// cout<<endl;
// }
bfs[1][0]=0,bfs[1][1]=0,bfs[1][2]=0;
int l=0,r=1;
while(l<=r){
l++;
for(int i=1;i<=4;i++){
int xx=bfs[l][0]+dx[i];
int yy=bfs[l][1]+dy[i];
int tt=bfs[l][2]+1;
if(xx>=0&&yy>=0&&xx<=305&&yy<=305&&tt<t[xx][yy]){
r++;
bfs[r][0]=xx;
bfs[r][1]=yy;
bfs[r][2]=tt;
if(t[xx][yy]==2139062143){
// cout<<xx<<yy;
cout<<bfs[r][2];
return 0;
}
}
}
}
cout<<-1;
return 0;
}
更正一下