首页 > 其他分享 >多段图最短路径(动态规划法)

多段图最短路径(动态规划法)

时间:2024-05-27 21:33:59浏览次数:14  
标签:int 起始 路径 规划法 数组 多段 节点

目录

前言

一、多段图的分析

二、算法思路

三、代码如下:

总结


前言

问题描述:设图G=(V, E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k),使得对于E中的任何一条边(u, v),必有u∈Vi,v∈Vi+m (1≤i≤k, 1<i+m≤k),则称图G为多段图,称s∈V1为源点,t∈Vk为终点。多段图的最短路径问题求从源点到终点的最小代价路径。

 

一、多段图的分析

二、算法思路

具体来说:

  • 首先,将起始节点到自身的成本设置为0,路径设置为-1。
  • 然后,对于除了起始节点以外的所有节点,初始化它们的成本为一个较大的值(这里使用了1000)。然后检查是否有更短的路径可以到达这些节点,如果有则更新成本和路径。
  • 最后,通过遍历路径数组,可以找到起始节点到目标节点的最短路径。

三、代码如下:

int ShortestPath(int arc[100][100],int n){ // 计算图中节点之间的最短路径的函数
    int i,j,cost[n],path[n]; // 声明变量i, j, cost数组和path数组

    cost[0]=0; // 将起始节点的成本设置为0
    path[0]=-1; // 将起始节点的路径设置为-1

    for(j=1;j<n;i++){ // 循环遍历除起始节点以外的所有节点
        cost[j]=1000; // 最初将节点的成本设置为一个较大的数值
        // 检查是否可以通过另一个节点降低当前节点的成本
        for(cost[i]+arc[i][j]<cost[j]){
            cost[j]=cost[i]+arc[i][j]; // 更新节点的成本
            path[j]=i; // 更新节点的路径
        }
    }

    cout<<--n; // 打印最短路径中节点的总数
    for(i=n;path[i]>=0;){ // 遍历路径数组以找到最短路径
        cout<<"<-"<<path[i]; // 打印最短路径中的节点
        i=path[i]; // 更新索引以遍历路径数组
    }

    return cost[n-1]; // 返回最短路径的成本
}

总结

优点:
1. 实现了 Dijkstra 算法的基本思想,能够计算带权重的有向图中起点到目标节点的最短路径,并输出最短路径节点的总数和路径。
2. 使用了数组来存储节点的成本和路径信息,节省了空间,对于小规模的图可能有一定的效率。

缺点:算法中使用的数组大小是固定的,如果图的规模超出了数组的大小范围,程序会出现数组越界的问题。如果图的规模小,则浪费了空间。我是一个小菜鸡,欢迎各路大神批评指正!!

标签:int,起始,路径,规划法,数组,多段,节点
From: https://blog.csdn.net/2301_79582459/article/details/139212730

相关文章

  • MindSponge分子动力学模拟——多路径分子模拟(2024.05)
    技术背景在前面的MindSponge教程系列博客中,我们已经介绍过MindSponge分子动力学模拟框架的基础功能使用方法,例如MindSponge的安装与使用、定义分子系统、计算单点能和迭代器等等。这些模块和功能,更多的是凭借MindSpore深度学习框架的自动微分、GPU加速和Python语言的灵活性,而本文......
  • 算法训练 | 二叉树Part4 | 10.平衡二叉树、257.二叉树的所有路径、404.左叶子之和
    目录110.平衡二叉树递归法迭代法257.二叉树的所有路径递归法迭代法404.左叶子之和递归法迭代法110.平衡二叉树题目链接:leetcode.cn文章讲解:代码随想录递归法解题思路高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。要求......
  • 【二维路径规划】基于快速RRT-star实现二维空间移动机器人运动规划附matlab复现
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 迪杰斯特拉算法实现最短路径
    1.用邻接表实现1.先写出一个邻接表 #include<iostream>#include<vector>#include<queue>usingnamespacestd;//定义边结构体structEdge{ intto;//边指向的顶点 intweight;//边的权重,如果图是无权重的,可以省略这个成员};//邻接表类classAdjacenc......
  • Leetcode 1971. 寻找图中是否存在路径
    有一个具有n个顶点的双向图,其中每个顶点标记从0到n-1(包含0和n-1)。图中的边用一个二维整数数组edges表示,其中edges[i]=[ui,vi]表示顶点ui和顶点vi之间的双向边。每个顶点对由最多一条边连接,并且没有顶点存在与自身相连的边。请你确定是否存在从......
  • 关于Module中在junit测试方法和非测试方法中获取相对路径不一致的问题
    注意:Module中在junit测试方法和非测试方法中获取相对路径不一致的问题如果在Module中测试相对路径是从当前Module下找非测试相对路径是在项目下找分析原因:Module中非测试方法属于整个项目方法,它面向整个Project,Project包含了下面的各个模块(module),所以非测试方法中,获取文......
  • 【路径规划】基于遗传算法求解带时间窗容量限制的单配送中心多骑手外卖配送路径规划问
    研究背景:随着外卖业务的快速发展,如何合理安排多骑手的配送路径,减少配送时间和成本,成为外卖平台需要解决的重要问题。在实际操作中,骑手需要在一定的时间窗内完成配送,并且配送中心的配送能力也有限,因此需要考虑时间窗和容量限制的多骑手外卖配送路径规划问题。研究步骤:理解......
  • 代码随想录算法训练营第第18天 | 513.找树左下角的值 、112. 路径总和 、106.从中
    找树左下角的值本地递归偏难,反而迭代简单属于模板题,两种方法掌握一下题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.找树左下角的值.html/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undef......
  • Python & FastAPI , 路径(路由)操作
    路径,或称“端点”或“路由”/items/foo=>指向的路径为:https://www.xxx.com/items/foo在HTTP协议中,可以使用这些“方法”中的一个(或多个)与每个路径通信:HTTP方法:POST,GET,PUT,DELETE,OPTIONS,HEAD,PATCH,TRACE在构建api时,通常使用这些特定的HTTP方法来执行特定......
  • Python & FastAPI , 路径中带参数
    如下:fromfastapiimportFastAPIapp=FastAPI()@app.get("/items/{item_id}")asyncdefread_item(item_id):return{"item_id":item_id}路径参数item_id的值将作为参数item_id传递给函数,输入http://127.0.0.1:8000/items/foo,foo为传入的参数,则其响应如下:{"it......