HDU 3665 Seaside 最短路

 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3665

 

题意很简单,将海看为第n个点就是标准的最短路算——Dijkstra。

 

代码如下:有注释

#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;

#define INF 0x3f3f3f3f
int n;
int edge[13][13];//记录边
int s[13];//从小到大找,标记数组
int xh[13];//xh[i]表示0到i点的最小距离

int MIN(int a,int b)
{
    return a<b?a:b;
}

void Dijkstra()
{
    int i,temp,k,j;
    for(i=0;i<=n;i++)
    {//初始化
        xh[i]=edge[0][i];
        s[i]=0;
    }
    s[0]=1;
    xh[0]=0;
    for(i=0;i<=n;i++)
    {
        temp=INF;
        k=0;
        for(j=0;j<=n;j++)
            if(!s[j]&&temp>xh[j])
            {
                k=j;
                temp=xh[j];
            }
        s[k]=1;
        for(j=0;j<=n;j++)
            if(!s[j]&&edge[k][j]<INF)
                xh[j]=MIN(xh[j],xh[k]+edge[k][j]);
    }
}

int main()
{
    int i,j;
    while(cin>>n)
    {
        memset(edge,INF,sizeof(edge));
        for(i=0;i<n;i++)
        {
            int a,b,c,d;
            scanf("%d%d",&a,&b);
            if(b==1)//海记为n点
                edge[i][n]=0;
            while(a--)
            {
                scanf("%d%d",&c,&d);
                edge[i][c]=d;
            }
        }
        Dijkstra();
        printf("%d\n",xh[n]);
    }
    return 520;
}


 

你可能感兴趣的:(HDU 3665 Seaside 最短路)