代码随想录算法【Day61】

97.小明逛公园

思路

通过 动态规划 迭代更新最短路径,每次增加一个中间点k,判断是否能通过k使i到j的距离更短。最终,在n轮迭代后,grid[start][end][n] 存储 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;
    }
}
相关推荐
努力的小帅42 分钟前
C++_红黑树树
开发语言·数据结构·c++·学习·算法·红黑树
CoovallyAIHub1 小时前
YotoR模型:Transformer与YOLO新结合,打造“又快又准”的目标检测模型
深度学习·算法·计算机视觉
孟大本事要学习1 小时前
算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树
算法·动态规划
ezl1fe1 小时前
RAG 每日一技(九):你的RAG是“人工智障”还是“真智能”?聊聊RAG的评估
后端·算法
এ᭄画画的北北2 小时前
力扣-51.N皇后
算法·leetcode
qqxhb2 小时前
零基础数据结构与算法——第六章:算法设计范式与高级主题-设计技巧(上)
java·数据结构·算法·分解·空间换时间·时空平衡
2 小时前
LeetCode Hot 100 搜索二维矩阵
算法·leetcode·矩阵
小新学习屋2 小时前
《剑指offer》-算法篇-位运算
python·算法·leetcode·职场和发展·数据结构与算法
Swiler2 小时前
数据结构第2问:什么是算法?
数据结构·人工智能·算法
鼠鼠一定要拿到心仪的offer2 小时前
Day23-二叉树的层序遍历(广度优先搜素)
数据结构·算法·leetcode