• 城市路(Dijkstra)


    时间限制:1秒 内存限制:128M
    题目描述

    罗老师被邀请参加一个舞会,是在城市n,而罗老师当前所处的城市为1,附近还有很多城市2~n-1,有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条。
    现在给出直接相邻城市的路长度,罗老师想知道从城市1到城市n,最短多少距离。

    输入描述

    输入n, m,表示n个城市和m条路;
    接下来m行,每行a b c, 表示城市a与城市b有长度为c的路。

    输出描述

    输出1到n的最短路。如果1到达不了n,就输出-1。

    样例
    输入
    5 5
    1 2 20
    2 3 30
    3 4 20
    4 5 20
    1 5 100
    输出
    90
    提示

    【数据规模和约定】
    1≤n≤2000
    1≤m≤10000
    0≤c≤10000

    不多bb,上代码

    #include<bits/stdc++.h>
    using namespace std;
    int g[2005][2005];
    int n,m;
    int dis[2005];
    bool used[2005];
    int main(){
        memset(g,0x3f,sizeof(g));
        cin>>n>>m;
        for(int i=1;i<=m;++i){
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            g[a][b]=min(g[a][b],c);
            g[b][a]=min(g[b][a],c);
        }
        memset(dis,0x3f,sizeof(dis));
        dis[1]=0;
        for(int i=1;i<=n;++i){
            int minn=0x3f3f3f3f,minn_j=0;
            for(int j=1;j<=n;++j){
                if(used[j]==false&&dis[j]<minn){
                    minn=dis[j];
                    minn_j=j;
                }
            }
            if(minn_j==0)
                break;
            used[minn_j]=true;
            for(int j=1;j<=n;j++)
                if(used[j]==false)
                    dis[j]=min(dis[j],dis[minn_j]+g[minn_j][j]);
        }
        if(dis[n]==0x3f3f3f3f)
        cout<<-1;
        else
        cout<<dis[n];
    }
    

      请大家

    小蒟蒻ΩωΩ I AK IOI.
  • 相关阅读:
    Forrester:开源APM发展势头强劲
    Forrester:开源APM发展势头强劲
    canvas 绘图api的位置问题
    canvas 绘图api的位置问题
    canvas 绘图api的位置问题
    canvas 绘图api的位置问题
    Android应用层View绘制流程与源码分析
    Android应用层View绘制流程与源码分析
    Android应用层View绘制流程与源码分析
    未来5年到底是做什么生意最好?
  • 原文地址:https://www.cnblogs.com/20070618hyz/p/13695179.html
Copyright © 2020-2023  润新知