TZOJ 2732: 存钱计划(三) 最短路/Floyd

描述

 

TZC的店铺比较多,上次WY随便走只要能走到就行,现在他学聪明了。WY去买东西的话,确定一家店以后,当然他先要想想怎么样走到那家店走的路最少。店与店之间是有走的方向的,从店A到店B可以,店B到店A未必可以。店与店之间是有一定距离的。

上面就是路线,为方便起见,店铺都用数字表示,0表示WY的起点,店与店之间以及起点与店距离用d表示。WY从0开始到4店铺  那么最短路线为0-->3-->2-->4  总长为 60。

如果从0店铺开始到1店铺最短路线只有0-->1  总长 10。

当然也有可能没有路的情况。

 

输入

 

输入有多组测试数据。

每组数据的第一行为整数n(n<=10),表示店铺总数。所有店铺的编号为0~n-1。

接下来有若干行,每行为3个整数
a b t 
表示a编号的店铺走向b编号的店铺之间的一条路径,长度为t。0<=a,b<n(为有向路径,不能反向行走)。

当a b t的值为0 0 0 表示店铺之间的路径输入完毕,不做任何处理。

最后一行输入店铺的编号k(k<n)

输入n为0时表示结束程序。

 

输出

 

输出从店铺0到k店铺的最短路线的长度。如果没有路的话,输出 NO WAY!

 

 

样例输入

 

5
0 1 10
0 3 30
0 4 100
1 2 50
2 4 10
3 2 20
3 4 60
0 0 0
4
5
0 1 10
2 0 50
0 3 10
0 0 0
2
0

样例输出

 

60
NO WAY!

提示

简单最短路径问题

Floyd模板题

复制代码
#include<bits/stdc++.h>
using namespace std;
const int inf = 1e9+10;
int ma[1001][1001];
int dis[1001];
int vis[1001];
int n,m;
int main()
{
    
    while(cin>>n,n)
    {
        for(int i=0;i<=n-1;i++)
            for(int j=0;j<=n-1;j++)
            {
                if(i==j)ma[i][j]=0;
                else ma[i][j] = inf;
            }
        int a,b,t;
        while(cin>>a>>b>>t,a,b,t)ma[a][b] = t;
        int e;
        cin>>e;
        for(int k=0;k<n;k++)
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                {
                    if(ma[i][j]>ma[i][k]+ma[k][j])
                        ma[i][j]=ma[i][k]+ma[k][j];
                }
        if(ma[0][e]==inf)cout<<"NO WAY!"<<endl;
        else cout<<ma[0][e]<<endl;
    }
     return 0;
}
复制代码

 

posted @   CRt0729  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示