博客
关于我
POJ 2387 Til the Cows Come Home(Dijkstra优先队列)
阅读量:331 次
发布时间:2019-03-04

本文共 1915 字,大约阅读时间需要 6 分钟。

为了解决这个问题,我们需要找到Bessie从最后一个标志N走回第一个标志1的最短路径。这个问题可以通过使用Dijkstra算法来解决,因为道路是权重比较大的,且没有负权边。

方法思路

  • 问题分析:这是一个典型的最短路径问题,适合使用Dijkstra算法来解决。我们需要找到从节点N到节点1的最短路径。
  • 数据结构:使用邻接矩阵来表示道路连接,每个道路的权重即为道路的长度。
  • 算法选择:使用优先队列来实现Dijkstra算法,优先处理距离较小的节点,确保找到最短路径。
  • 优化:每次从优先队列中取出距离最小的节点,更新其邻居的最短距离,并将邻居加入队列。
  • 解决代码

    #include 
    #include
    #include
    #include
    using namespace std;struct node { int d; int pos;};bool operator<(const node& a, const node& b) { return a.d < b.d;}int main() { while (true) { int m, n; scanf("%d %d", &m, &n); if (scanf("%d %d", &m, &n) == EOF) break; int INF = 2005; int e[2005][2005]; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { e[i][j] = (i == j) ? INF : 0; } } for (int i = 1; i <= m; ++i) { int u, v, w; scanf("%d %d %d", &u, &v, &w); if (e[u][v] > w) { e[u][v] = w; e[v][u] = w; } } int dis[n + 1]; int book[n + 1]; fill(dis.begin(), dis + n + 1, INF); fill(book.begin(), book + n + 1, 0); dis[n] = 0; priority_queue
    q; q.push({0, n}); while (!q.empty()) { node t = q.top(); q.pop(); if (t.pos == 1) break; if (book[t.pos] == 1) continue; book[t.pos] = 1; for (int j = 1; j <= n; ++j) { if (book[j] == 0 && dis[j] > dis[t.pos] + e[t.pos][j]) { dis[j] = dis[t.pos] + e[t.pos][j]; q.push({dis[j], j}); } } } cout << dis[1] << endl; }}

    代码解释

  • 输入处理:读取输入数据,包括道路的数量T和标志的数量N,然后读取每条道路的信息,填充邻接矩阵。
  • 初始化:设置邻接矩阵中所有距离为无穷大,除了起点N的距离为0。
  • 优先队列:使用优先队列来处理节点,优先处理距离较小的节点。
  • Dijkstra算法:每次取出距离最小的节点,更新其邻居的最短距离,并将邻居加入队列,直到找到目标节点1。
  • 输出结果:输出从节点N到节点1的最短距离。
  • 转载地址:http://lpnh.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 实战 | 使用YOLOv8 Pose实现瑜伽姿势识别
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用姿态估计算法构建简单的健身训练辅助应用程序
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于OpenCV和K-Means聚类实现颜色分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YoloV5和Mask RCNN实现汽车表面划痕检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9和OpenCV实现车辆跟踪计数(步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 文本图片去水印--同时保持文本原始色彩(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
    查看>>
    OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
    查看>>
    OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
    查看>>
    OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
    查看>>
    OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 水下检测+扩散模型:或成明年CVPR最大惊喜!
    查看>>
    OpenCV与AI深度学习 | 深度学习检测小目标常用方法
    查看>>
    OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
    查看>>
    OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
    查看>>
    OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
    查看>>