NEFU 208 flyod

 题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=208

只需要开始标记一个值 然后判断最后的结果是否更新过 若更新过则存在这样的路,否则不存在

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int map[110][110];

int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        int a,b,x;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                map[i][j]=10000000;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d%d",&a,&b,&x);
            if(map[a][b]>x)
            {
                map[a][b]=x;
                map[b][a]=x;
            }
        }
        for(int k=0;k<n;k++)
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                {
                    if(map[i][k]==10000000||map[k][j]==10000000)
                        continue;
                    if(map[i][k]+map[k][j]<map[i][j])
                       map[i][j]=map[i][k]+map[k][j];
                }
        scanf("%d%d",&a,&b);
        if(map[a][b]!=10000000)
            cout<<map[a][b]<<endl;
        else
           puts("-1");
    }
    return 0;
}


你可能感兴趣的:(NEFU 208 flyod)