poj 1062(dijkstra最短路径问题)
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> using namespace std; struct Node{ int p,l,x; int di[105]; int d[105]; }node[105]; int m; int visit[105]; int dis[105]; int data[105][105]; int main(){ int n,mind,mini; scanf("%d%d",&m,&n); memset(data,0,sizeof data); for(int i=1;i<=n;i++){ scanf("%d%d%d",&node[i].p,&node[i].l,&node[i].x); data[i][i] = node[i].p; for(int j=1;j<=node[i].x;j++){ scanf("%d%d",&node[i].di[j],&node[i].d[j]); data[i][node[i].di[j]] = node[i].d[j]; } } // for(int i=1;i<=n;i++){ // cout<<node[i].l<<endl; // } dis[1] = data[1][1]; // 初始化源点到各终点的距离 for(int i=2;i<=n;i++){ if(data[1][i]!=0&&abs(node[1].l-node[i].l)<=m){ dis[i] = data[1][i]+data[i][i]; } else{ dis[i] = 2147483647; } } // 将源点置已访问 visit[1] = 1; for(int k=2;k<=n;k++){ mind = 2147483647; mini = -1; for(int i=2;i<=n;i++){ if(abs(node[i].l-node[1].l)<=m&&data[1][i]!=0&&visit[i]==0){ // 取出距离最小的点 if(mind>data[1][i]+data[i][i]){ mini = i; mind = data[1][i]+data[i][i]; } } } if(mini==-1)continue; // 将距离最小点的距离更新至dis数组 dis[mini] = mind; // 将距离最小点置已访问 visit[mini] = 1; for(int i=2;i<=n;i++){ // 若可以将mini作为中继节点使dis的值变小,那么更新dis数组且更新data数组 if(i!=mini&&abs(node[1].l-node[i].l)<=m&&data[mini][i]!=0&&mind-data[mini][mini]+data[mini][i]+data[i][i]<dis[i]){ dis[i] = mind-data[mini][mini]+data[mini][i]+data[i][i]; data[1][i] = dis[i]-data[i][i]; } } } mind = dis[1]; for(int i=2;i<=n;i++){ //找出最小的路径 if(mind>dis[i]){ mind = dis[i]; } } cout<<mind<<endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)