模板题(最短路Dijkstra算法)

题目链接:HDOJ2544

《模板题(最短路Dijkstra算法)》

#include<bits/stdc++.h>
#define inf 1e9

using namespace std;

int mmap[105][105];
int dis[105];// 记录某个点到vis集合的最短路
int vis[105];//vis记录某个点是否已经包含在已找到最短路的集合中


int main()
{
    int n,m;//n个路口;m条边

    while(cin>>n>>m&&(n+m))
    {
       memset(vis,0,sizeof(vis));
       int a,b,c;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
               mmap[i][j]=inf;
        fill(dis+1,dis+n+1,inf);

        for(int i=1; i<=m; i++)
        {
            cin>>a>>b>>c;
            mmap[a][b]=mmap[b][a]=c;
        }

        vis[1]=1;
        for(int i=1; i<=n; i++)
            dis[i]=mmap[1][i];

        while(1)
        {
            int mmin=inf;
            int nextin=0;//不存在0号路口

            for(int i=1; i<=n; i++)
            {
                if(vis[i]==0&&dis[i]<mmin)
                {
                    mmin=dis[i];
                    nextin=i;
                }
            }

            if(nextin==0)
            {
                break;   //没有下一个nextin点,说明所以点都找到了自己的最短路
            }

            vis[nextin]=1;//把nextin加入已找到最短路的点的集合

            //加入nextin后,更新dis数组
            for(int i=1; i<=n; i++)
            {
                if(dis[nextin]+mmap[nextin][i]<dis[i])
                    dis[i]=dis[nextin]+mmap[nextin][i];
            }
        }
        cout<<dis[n]<<endl;
    }
}

 

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/k0_0k/article/details/81237780
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞