题目描述
给定一个带权无向图,求节点1到节点n的最短路径。
输入
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
输出
每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
示例输入
3 2 1 2 1 1 3 1 1 0
示例输出
1 0
01.#include 02.#include 03.#include 04.#define inf 999999 05.using namespace std; 06.int main() 07.{ 08. int map1[110][110]; 09. int vis[110],dis[110]; 10. int n,m,j,i,k,l,x,y,z; 11. while(cin>>n>>m) 12. { 13. for(i=1;i<=n;i++) 14. { 15. for(j=1;j<=n;j++) 16. { 17. map1[i][j]=inf; 18. if(i==j) map1[i][j]=0; 19. 20. } 21. } 22. for(i=1;i<=m;i++) 23. { 24. cin>>x>>y>>z; 25. if(map1[x][y]>z) 26. map1[x][y]=map1[y][x]=z; 27. } 28. int s=1,e=n; 29. int pos; 30. memset(vis,0,sizeof(vis)); 31. for(i=1;i<=n;i++) 32. dis[i]=map1[s][i]; 33. vis[s]=1; 34. for(i=1;i map1[pos][j]+dis[pos]) 49. dis[j]=map1[pos][j]+dis[pos]; 50. } 51. } 52. cout< <