图结构练习——最短路径(dijkstra算法)
来源:互联网 发布:mac用什么flash player 编辑:程序博客网 时间:2024/05/22 00:00
Problem Description
给定一个带权无向图,求节点1到节点n的最短路径。
Input
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
Output
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
Example Input
3 21 2 11 3 11 0
Example Output
10
注意:最短路覆盖
#include<iostream>#include<stdio.h>#include <cstring>using namespace std;const int inf=99999999;int amap[105][105];int book[105];int dis[105];int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { if(m==0) { cout<<0<<endl; continue; } memset(book,0,sizeof(book)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i==j)amap[i][j]=0; else amap[i][j]=inf; } for(int i=1;i<=m;i++) { int x,y,z; cin>>x>>y>>z; if(amap[x][y]>z) //避免覆盖最短路 amap[x][y]=amap[y][x]=z; } for(int i=1;i<=n;i++) //dis数组初始化 { dis[i]=amap[1][i]; } book[1]=1; for(int i=1;i<=n-1;i++) //1到n-1 { int amin=inf; int a; for(int j=1;j<=n;j++) { if(book[j]==0&&dis[j]<amin) { amin=dis[j]; a=j; } } book[a]=1; for(int i=1;i<=n;i++) { if(amap[a][i]<inf) { if(dis[i]>dis[a]+amap[a][i]) dis[i]=dis[a]+amap[a][i]; } } } cout<<dis[n]<<endl; } return 0;}
阅读全文
0 0
- 图结构练习——最短路径 dijkstra算法
- 【2143】图结构练习——最短路径 (Dijkstra算法)(SDUT)
- 图结构练习——最短路径(Dijkstra算法)
- 图结构练习——最短路径(Dijkstra算法)
- 图结构练习——最短路径(dijkstra算法)
- SDUT 2143 图结构练习——最短路径(Dijkstra 单源最短路径求解)
- SDUT 2143 - 图结构练习——最短路径(dijkstra+模板)
- 图结构练习——最短路径 (Floyd算法)
- OJ2143图结构练习——最短路径(迪杰斯特拉算法)
- 图结构练习——最短路径(Floyd算法)
- 最短路径算法——Dijkstra
- 最短路径——Dijkstra算法
- 最短路径——Dijkstra算法
- 最短路径—Dijkstra算法
- 最短路径Ⅰ—Dijkstra算法
- 最短路径—Dijkstra算法
- 最短路径算法—Dijkstra(迪杰斯特拉)
- 最短路径—Dijkstra算法
- mysql 共享锁与排他锁
- IO流(二)
- 交通工具
- JVM
- 例题8-3 和为0的4个值(4 Values Whose Sum is Zero, ACM/ICPC SWERC 2005, UVa 1152)
- 图结构练习——最短路径(dijkstra算法)
- 括号匹配详解
- 三目运算符?:
- 日期和时间
- 十月十三日课堂笔记
- VS2013 调试窗口一闪而过的解决方法
- 链表(用一个结构体管理另一个结构体的头指针),方便管理好几个链表的情况。
- CCF 通信网络
- TypeError: Input 'split_dim' of 'Split' Op has type float32 that does not match expected type of int