HDU 2066 一个人的旅行

一个人的旅行

多起点,多终点,再在其中找一个最短的,如果估算数据小的话可以多次求最短路,更好的还是用弗洛伊德算法,预先打表,对于后面的问题直接调用,节约时间。这道题基本上就是弗洛伊德算法的模板。注意输入可能有重复边。

#include
#include
#include
#define M 0xfffffff
#define N 1002
using namespace std;
int n,m,j,i,k,l,s,d;
int a[N][N],b[N][N];

int main()
{
    while(~scanf("%d%d%d",&m,&s,&d))
    {
        for(i=0; i=M)
                    continue;
                for(k=1; k<=N; k++)
                {
                    if(a[j][k]>a[j][i]+a[i][k])
                    {
                        a[j][k]=a[j][i]+a[i][k];
                        b[j][k]=b[j][i];
                    }
                }
            }
        }
        int start[N],end[N];
        int minm=M;
        for(i=1; i<=s; i++)
            scanf("%d",&start[i]);
        for(i=1; i<=d; i++)
        {
            scanf("%d",&end[i]);
            for(j=1; j<=s; j++)
            {
                if(a[start[j]][end[i]]


你可能感兴趣的:(图论)