1.练习项目  :

题目描述

小明喜欢观景,于是今天他来到了蓝桥公园。

已知公园有 N 个景点,景点和景点之间一共有 M 条道路。小明有 Q 个观景计划,每个计划包含一个起点 st 和一个终点 ed,表示他想从 st 去到 ed。但是小明的体力有限,对于每个计划他想走最少的路完成,你可以帮帮他吗?

输入描述

输入第一行包含三个正整数 N,M,Q

第 2 到 M+1 行每行包含三个正整数 u,v,w,表示 u↔v 之间存在一条距离为 w 的路。

第 M+2 到 M+Q−1 行每行包含两个正整数 st,ed,其含义如题所述。

1≤N≤400,1≤M≤N×(N−1)/2​,Q≤103,1≤u,v,st,ed≤n,1≤w≤109

输出描述

输出共 Q 行,对应输入数据中的查询。

若无法从 st 到达 ed 则输出 −1。

2.选择课程

在蓝桥云课中选择题库,选择题号1121并开始练习。

3.开始练习

(1)源码     :

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 405;
const ll inf = 2e18;
ll d[N][N];


int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n,m,q;cin>>n>>m>>q;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            d[i][j]=inf;
    //到自己的距离为0
    for(int i=1;i<=n;i++)d[i][i]=0;
    
    while(m--){
        ll u,v,w;cin>>u>>v>>w;
        d[u][v]=min(d[u][v],w);
        d[v][u]=min(d[v][u],w);
        
    }
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
    
    while(q--){
        int st,ed;cin>>st>>ed;
        cout<<(d[st][ed]>=inf?-1:d[st][ed])<<'\n';
    }
    return 0;
}

(2)检验结果

对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。

(3)练习心得:注意每段代码末尾的分号是否存在   ,如不存在则需即使补充;输入法   是否切换 为英语模式;语法是否错误。

更多推荐