/*
最短路
*/
#include <stdio.h>
#define N 110
int map[N][N];
int n,m;
int dist[N];
int flag[N];
void find()
{
int i,j,l;
//将到达其他点的最短路径初始化
for(i=1;i<=n;i++) dist[i]=map[n][i];
dist[n]=0;//n点到达n点的距离是0;
flag[n]=1;
//一共需要找n-1个点的最短距离
for(l=1;l<n;l++){
int k=-1;//k存储当前n点到达其他点的最短距离
int maxv=0x3f3f3f3f;//设置最大值
for(i=1;i<=n;i++){
//如果当前点还没找过,且小于之前找过的最小值
if(flag[i]==0 && maxv>dist[i]){
//则将k赋值,表示找到的最小的点
k=i;
maxv=dist[i];
}
}
//如果k==-1.则表示找了一圈,已经没有符合条件的最短的路了
if(k==-1){
break;//直接退出
}
flag[k]=1;//找到的最短路标记一下
for(i=1;i<=n;i++){
if(!flag[i] && maxv+map[k][i]<dist[i]){
dist[i]=maxv+map[k][i];
}
}
}
}
int main()
{
int i,j;
int a,b,c;
while(scanf("%d%d",&n,&m)&&(n+m)){
for(i=1;i<=n;i++){
flag[i]=0;
for(j=1;j<=n;j++){
map[i][j]=0x3f3f3f3f;
}
}
while(m--){
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c){
map[a][b]=c;
map[b][a]=c;
}
}
find();
printf("%d\n",dist[1]);
}
return 0;
}
最短路-HDU2544-dijkstra模板题
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 题目大意 这道题要我们求一群奶牛最短的回家的路,题目会给你n个点,m条边,然后给你每条边又哪两个点相连,并且其中的...
- 目录 Floyd邻接表邻接表 Dijkstra队列优化 Bellman-Ford 与 SPFA ㅤ - 负环...
- 无权图 单源最短路 BFS带权图 单源最短路 Dijkstra O(V*logV + E)任意两个顶点间的最短路 ...
- 原题连接 题意 给定n个点以及m条无向边,求第n点到第一个点的最小距离纯粹的迪杰斯特拉模板题 思路 迪杰斯特拉:在...