玄关求调在线等qwq
查看原帖
玄关求调在线等qwq
931764
Never_care楼主2024/7/18 22:31

代码:


#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
const int N=310;
const int M=1e5+5;
int m;
int v[N][N];
int x[N],y[N],step[N];
int ans=INF;
int d[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
void bfs(){
    int head=1,tail=1;
    if(v[0][0]==-1){
        cout<<0;
        return;
    }
    while(head<=tail){
        for(int i=0;i<4;i++){
            int nx=x[head]+d[i][0];
            int ny=y[head]+d[i][0];
            if(nx>=0&&nx<=303&&ny>=0&&ny<=303&&step[head]+1<v[nx][ny]){
                tail++;
                x[tail]=nx;
                y[tail]=ny;
                step[tail]=step[head]+1;
                if(v[nx][ny]==-1) ans=min(ans,step[head]+1);
                v[nx][ny]=1;
            }
        }
        head++;
    }
    if(ans!=INF) cout<<ans;
    else cout<<-1;
}
int main(){
    cin>>m;
    memset(v,-1,sizeof(v));
    for(int i=1;i<=m;i++){
    	int x,y,t;
    	cin>>x>>y>>t;
        v[x][y]=min(v[x][y],t);
        for(int i=0;i<4;i++){
            int nx=x+d[i][0];
            int ny=y+d[i][1];
            if(nx>=0&&nx<=305&&ny>=0&&ny<=305){
           		v[nx][ny]=min(v[nx][ny],t);
			}
        }
        if(v[0][0]==0){
            cout<<-1;
            return 0;
        }
    }
    bfs();
    return 0;
}
2024/7/18 22:31
加载中...