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

来源:互联网 发布:帝国cms api接口 编辑:程序博客网 时间:2024/04/28 00:05

图结构练习——最短路径

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

 给定一个带权无向图,求节点1到节点n的最短路径。
 

输入

 输入包含多组数据,格式如下。
第一行包括两个整数n m,代表节点个数和边的个数。(n<=100)
剩下m行每行3个正整数a b c,代表节点a和节点b之间有一条边,权值为c。
 

输出

 每组输出占一行,仅输出从1到n的最短路径权值。(保证最短路径存在)
 

示例输入

3 21 2 11 3 11 0

示例输出

10


#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;int map_[220][220];int dis[220][220];void zf(int s,int e,int n){    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            dis[i][j] = map_[i][j];        }    }    for(int k=1;k<=n;k++)    {        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++)            {                if(i != j)                {                    if(dis[i][j] > dis[i][k] + dis[k][j])                        dis[i][j] = dis[i][k] + dis[k][j];                }            }        }    }    cout<<dis[s][e]<<endl;}int main(){    int n,m;    while(cin>>n>>m)    {        int a,b,c;        for(int i=0;i<=n;i++)        {            for(int j=0;j<=n;j++)            {                if(i == j)                    map_[i][j] = 0;                else                    map_[i][j] = INF;            }        }        for(int i=0;i<m;i++)        {            cin>>a>>b>>c;            if(map_[a][b] > c)            {                map_[a][b] = c;                map_[b][a] = c;            }        }        zf(1,n,n);    }    return 0;} 


0 0
原创粉丝点击