HDU_2544_最短路

题意:第一个路口是起点,第n个(最后一个)路口是终点,问最短路径。

总结:第一个dijkstra。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define N 105
#define INF 0x7ffffff

int map[N][N],visit[N],dis[N];

int dijkstra(int s,int n)
{
    memset(visit,0,sizeof(visit));
    for(int i=1;i<=n;i++)
        dis[i]=map[s][i];
    dis[s]=0;
    visit[s]=1;
    for(int i=1;i<=n;i++)
    {
        int tmp=INF,k;
        for(int j=1;j<=n;j++)
        {
            if(!visit[j]&&dis[j]<tmp)     ///找到离s最近的点
            {
                tmp=dis[j];
                k=j;
            }
        }
        if(tmp==INF)
            break;
        visit[k]=1;
        for(int j=1;j<=n;j++)
        {
            if(!visit[j]&&dis[j]>dis[k]+map[k][j])
                dis[j]=dis[k]+map[k][j];
        }
    }
    return dis[n];
}

int main()
{
    int n,m,a,b,c;
    while(~scanf("%d%d",&n,&m)&&n&&m)
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                map[i][j]=INF;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            map[a][b]=map[b][a]=c;
        }
        printf("%d\n",dijkstra(1,n));
    }
    return 0;
}

 

posted on 2015-08-30 15:36  JASONlee3  阅读(154)  评论(0编辑  收藏  举报

导航