#include<bits/stdc++.h>
using namespace std;
int dist[310][310],f[310][310];
int dx[5]={0,0,1,0,-1};
int dy[5]={0,1,0,-1,0};
struct node{
int x,y;
};
int main(){
queue<node> q;
memset(dist,-1,sizeof(dist));
memset(f,0x3f,sizeof(f));//memset第二个填0x3f就可以赋值为无穷大int
int n;
cin>>n;
int a,b,c;
int u,o;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
for(int j=0;j<=4;j++){
int r,g;
r=a+dx[j],g=b+dy[j];
if(r<0||r>301||g<0||g>301)continue;
if(c<f[r][g]){
f[r][g]=c;//因为焦土会重叠所有要记录小的那个
}
}
}
node t;
t.x=0;
t.y=0;
q.push(t);
dist[0][0]=0;
while(q.size()){
a=q.front().x;
b=q.front().y;
q.pop();
for(int i=1;i<=4;i++){
int k=a+dx[i];
int t=b+dy[i];
if(k<0||t<0)continue;
if(dist[k][t]>=0)continue;
if(dist[a][b]+1>=f[k][t])continue;
dist[k][t]=dist[a][b]+1;
node temp;
temp.x=k;
temp.y=t;
q.push(temp);
u=k,o=t;
//int 最大值0x3f3f3f3f
if(f[k][t]>=1e9) {printf("%d",dist[k][t]);
return 0;
}
}
// if(f[u][o]>1e9) printf("%d",dist[u][o]);
}
printf("-1");
return 0;
}
2895流星
最新推荐文章于 2024-10-31 19:07:52 发布
该C++代码实现了一个基于Dijkstra算法的求解在给定地图(310x310)上两点之间的最短路径问题,通过遍历并更新邻接矩阵来找到从起点到终点的最小步数。
摘要由CSDN通过智能技术生成