SDUT 2143 图结构练习——最短路径

题目描述

 给定一个带权无向图,求节点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<
         
         
           < 
           
         
        
        
       
       
      
      
     
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值