Til the Cows Come Home

一,题目

二,翻译

贝西在田野里,想在农夫约翰叫醒她早晨挤奶之前,回到谷仓里尽可能多地睡觉。贝西需要美容睡眠,所以她想尽快回来。

农夫约翰的田地里有N(2<=N<=1000)个地标,唯一编号为1..N。地标1是谷仓;贝西整天站在其中的苹果树小树林是地标N。奶牛在田野中行走时,使用地标之间不同长度的T(1<=T<=2000)条双向奶牛道。贝西对自己的导航能力不太自信,所以一旦开始,她总是会一直沿着一条路走到终点。

给定地标之间的路径,确定贝西返回谷仓必须走的最短距离。保证存在某些此类路线。

输入

*第1行:两个整数:T和N

*第2..T+1行:每行将一条轨迹描述为三个空格分隔的整数。前两个整数是轨迹行进的界标。第三个整数是轨迹的长度,范围为1..100。

输出

*第1行:一个整数,即贝西从地标N到地标1所需的最小距离。

三,思路

说白了,就是找1到N的最短路,硬套最短路算法就行

四,代码

#include<algorithm>
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
#define INF 1e9+7
int maze[1005][1005]={0},dis[1005]={0},book[1005]={0};
int main()
{
    int T,N;
    cin>>T>>N;
    memset(maze,INF,sizeof(maze));
    for(int i=1;i<=T;++i)
    {
        int x,y,len;
        cin>>x>>y>>len;
        if(maze[x][y]>len) maze[x][y]=len,maze[y][x]=len;
    }
    for(int i=1;i<=N;++i)
        dis[i]=maze[1][i];
    book[1]=1,dis[1]=0;
    for(int i=1;i<=N-1;++i)
    {
        int MIN=INF,flag=0;
        for(int j=1;j<=N;++j)
            if(dis[j]<MIN&&!book[j])
                MIN=dis[j],flag=j;
        book[flag]=1;
        for(int j=1;j<=N;++j) dis[j]=min(dis[j],dis[flag]+maze[flag][j]);
    }
    cout<<dis[N];
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值