当前位置: 首页 > article >正文

代码随想录算法训练营第五十九天|Day59 图论

Bellman_ford 算法精讲

https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I.html

思路

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define MAXM 10000 // 假设最大边数为10000
#define MAXN 1000  // 假设最大节点数为1000

typedef struct {
    int from; // 边的起点
    int to;   // 边的终点
    int weight; // 边的权重
} Edge;

int main() {
    int n, m, p1, p2, val;
    scanf("%d %d", &n, &m);

    Edge edges[MAXM]; // 用于存储所有的边
    for(int i = 0; i < m; i++) {
        scanf("%d %d %d", &p1, &p2, &val);
        edges[i].from = p1;
        edges[i].to = p2;
        edges[i].weight = val; // 建立边
    }

    int start = 1; // 起点
    int end = n;   // 终点

    // 存储从起点到每个节点的最短距离
    int minDist[MAXN];
    for (int i = 1; i <= n; i++) {
        minDist[i] = INT_MAX; // 初始化为无穷大
    }
    minDist[start] = 0; // 起点到本身的距离为0

    // 对所有边进行松弛 n-1 次
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < m; j++) {
            // 松弛操作
            if (minDist[edges[j].from] != INT_MAX && minDist[edges[j].to] > minDist[edges[j].from] + edges[j].weight) {
                minDist[edges[j].to] = minDist[edges[j].from] + edges[j].weight;
            }
        }
    }

    // 输出结果
    if (minDist[end] == INT_MAX) {
        printf("unconnected\n"); // 不能到达终点
    } else {
        printf("%d\n", minDist[end]); // 到达终点最短路径
    }

    return 0;
}

学习反思

代码实现了使用Dijkstra算法求解单源最短路径问题。代码中的Edge结构体表示一条边,包括起点、终点和权重。首先从输入中读取节点数n和边数m,然后通过循环读取每条边的信息,并保存到edges数组中。接下来定义了起点start和终点end,以及minDist数组用于存储从起点到每个节点的最短距离。然后,使用嵌套循环对所有边进行n-1次松弛操作,以更新minDist数组中的最短距离。最后,判断终点的最短距离是否为INT_MAX,如果是则输出"unconnected",否则输出最短距离。整个代码的时间复杂度为O(nm)。


http://www.kler.cn/a/417394.html

相关文章:

  • PHP 函数
  • 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  • Oracle 插入数据的存储过程
  • 基于Java Springboot个人记账之财来财往微信小程序
  • 【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格
  • 从 App Search 到 Elasticsearch — 挖掘搜索的未来
  • 前端 时间格式占位符 学习
  • 汽车仪表板可识别安全气囊,安全带,ABS,邮箱,灯等多种告警参数,YOLO,VOC,COCO三种方式标记的数据集整理
  • Java学习,数据结构
  • Rumor Containment by Spreading Correct Information in Social Networks
  • 深度学习之Mask-R-CNN
  • npm-运行项目报错:A complete log of this run can be found .......npm-cache_logs\
  • ArkTs内外边距,边框,背景图,横纵布局模式
  • 自动驾驶目标检测融合全貌
  • Qt 无法连接MySQL数据库
  • NVR录像机汇聚管理EasyNVR多个NVR同时管理基于B/S架构的技术特点与能力应用
  • 父子通信以及Props的使用
  • Android studio 利用cmake编译和使用so文件
  • 【K230 CanMV】machine.FPIOA、Pin 与 GPIO 全解析
  • 自然语言处理基础之文本预处理
  • C/C++中的调用约定
  • 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  • 下载maven 3.6.3并校验文件做md5或SHA512校验
  • 深度学习中的梯度下降算法:详解与实践
  • Flink-State状态
  • 【STM32学习】TB6612FNG驱动芯片的学习,驱动电路的学习