代码随想录算法【Day61】

97.小明逛公园

思路

通过 动态规划 迭代更新最短路径,每次增加一个中间点k,判断是否能通过k使i到j的距离更短。最终,在n轮迭代后,gridstartendn 存储 start 到 end 的最短路径。若值为 10005(初始化的无穷大),表示两点不可达,输出 -1,否则输出最短路径长度。

代码

c++ 复制代码
#include <iostream>
#include <vector>
#include <list>
using namespace std;

int main() {
    int n, m, p1, p2, val;
    cin >> n >> m;

    vector<vector<vector<int>>> grid(n + 1, vector<vector<int>>(n + 1, vector<int>(n + 1, 10005)));  
    for(int i = 0; i < m; i++){
        cin >> p1 >> p2 >> val;
        grid[p1][p2][0] = val;
        grid[p2][p1][0] = val; 
    }

    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                grid[i][j][k] = min(grid[i][j][k-1], grid[i][k][k-1] + grid[k][j][k-1]);
            }
        }
    }

    int z, start, end;
    cin >> z;
    while (z--) {
        cin >> start >> end;
        if (grid[start][end][n] == 10005) cout << -1 << endl;
        else cout << grid[start][end][n] << endl;
    }
}
相关推荐
hetao173383714 分钟前
2026-09-13 hetao1733837 的刷题记录
c++·算法
hansang_IR22 分钟前
【题解】[JSOI2016] 扭动的回文串
c++·算法
Lyyaoo.23 分钟前
【二分查找】【困难】寻找两个有序数组的中位数
java·数据结构·算法
kevin_kang1 小时前
第05章 实时语音识别的 ASR 原理
算法
kevin_kang1 小时前
第04章 断句原理:本地 VAD 与神经网络 VAD
算法
kevin_kang1 小时前
第06章 文字转语音的 TTS 原理
算法
6Hzlia1 小时前
【Classic 150 刷题计划】 LeetCode 123. 买卖股票的最佳时机 III | C++ 状态机动态规划与通用交易拓展
c++·算法·leetcode
luj_17681 小时前
生物体如何应对功能击穿?
c语言·开发语言·c++·经验分享·算法
luj_17682 小时前
击穿分析五大关键步骤
开发语言·网络·c++·经验分享·算法
星空2 小时前
Map<String, String>`Map`是接口,不能直接 new
java·前端·算法