Bootstrap

【入门】城市之间的最短路

描述

小丁同学准备去A国旅游,他买了一张A国的地图,地图标出了A国著名的n个旅游热门城市,并标注了这n个城市之间有m条路线相连以及每条路线的长度。

请你编程帮助小丁求出其中两个城市之间的最短距离。

输入描述

输入第一行为两个正整数n(n<=10)和m(m<=n*(n-1)/2),n表示城市个数,m表示线段个数。

接下来m行,每行输入三个整数a,b和l,表示a市与b市之间存在一条线段,线段长度为l。(a与b不同,且本题的数据中两个城市之间最多只有一条路)

每组最后一行输入两个整数x和y,表示问题:x市与y市之间的最短距离是多少。(x与y不同)

城市标号为1~n,l<=20。

输出描述

输出x市与y市之间的最短距离,如果x市与y市之间非连通,则输出“No path”。

用例输入 1 
4 4
1 2 4
1 3 1
1 4 1
2 3 1
2 4
用例输出 1 
3
来源

图论

code:

#include<bits/stdc++.h>
using namespace std;
int mp[1001][1001],n,m,INF=0x3f3f3f3f;
int main()
{
    cin>>n>>m;
    memset(mp,0x3f3f3f3f,sizeof(mp));
    for(int i=1;i<=m;i++)
    {
        int a,b,l;
        cin>>a>>b>>l;
        mp[a][b]=l;
        mp[b][a]=l;
    }
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
    int x,y;
    cin>>x>>y;
    if(mp[x][y]==INF)
        cout<<"No path";
    else
        cout<<mp[x][y];
}

时间复杂度不超过:n(logn^{2})

AC:

;