图论之最短路

一在求最短路前我们来看看图的存储

1.邻接矩阵的建立:

int n,g[N][N];//n个点,对于g[x][y]表示起点x到终点y的边权(有向边)
g[x][y]=g[y][x]=z;//无向边的处理
g[x][y]=min(g[x][y],z);//重边的处理(最短路只保留最短的一条边即可)

2.邻接表的建立:

int head[N],ne[M],ver[M],edge[M],idx;
//邻接表的建立
void add(x,y,z)
{
    idx++; ver[idx]=y,edge[idx]=z,ne[idx]=head[x],head[x]=idx;
}
//无向边的处理:
add(x,y,z),add(y,x,z)

x表示起点,y表示终点,z表示这条边的边权,N表示最大范围的点数,M表示最大边数,

add操作同数组模拟单链表类似,ver终点集合,head起点集合,ne指向下一个标号,edge表示边,它们通过同一个idx统一,

朴素Dijkstra算法(邻接矩阵存)

适用情况:求s号点到图中其他所有点的最短距离   O(n^2)

int d[N];//表示从某一点到当前距离是多少
bool v[N];//判断每个点的最短路是否已经确定了

算法步骤:

1.初始化将dist置为无穷大,v默认false,起点到自己的距离默认为0

2.进行n次循环,在每一次循环中都要确定s到一个还没有确定最短距离点的最短距离(那么n次循环就能确定n个点的最短距离)

即,先找到x<--找到不在st中的距离最近的点,再用这个点更新到其他点的距离

d[y]=min(d[y],d[x]+a[x][y]);//表示s到y的之前确定的距离和s到x再到y的距离的更小

现在我们来看看题目:

给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值,求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1
输入:
第一行:n(1~500)和m(1~10000)
接下来m行 x,y,z:点x和点y间存在一条有向边,边长为z
输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]提供了使用Python的networkx库绘制网络图和计算最短加权路径的示例代码。该代码使用了一个包含顶点和边的列表,并使用add_nodes_from和add_weighted_edges_from方法将它们添加到图中。然后,使用nx.shortest_path_length方法计算了从顶点v1到顶点v11的最短加权路径长度为13。\[1\] 引用\[2\]提供了一个计算最短路径的Python程序示例。该程序使用了numpy和networkx库。首先,定义了一个包含顶点和边的列表,并使用add_nodes_from和add_weighted_edges_from方法将它们添加到图中。然后,使用nx.shortest_path_length方法计算了最短路径长度,并将结果存储在一个字典中。接下来,使用numpy创建了一个6x6的零矩阵,并使用两个嵌套的for循环将最短路径长度填充到矩阵中。最后,使用矩阵乘法计算了运力,并找到了最小运力和对应的位置。\[2\] 引用\[3\]提供了关于Dijkstra算法的一些背景信息。Dijkstra算法是一种寻找最短路径的算法,适用于所有权重大于等于0的情况。它可以用于解决从一个起始点到任意一个点的最短路径问题。\[3\] 综上所述,如果你想在Python中计算图论中的最短路径,可以使用networkx库和Dijkstra算法。你可以根据引用\[1\]和引用\[2\]中的示例代码进行操作。 #### 引用[.reference_title] - *1* *3* [运筹学——图论与最短距离(Python实现)](https://blog.csdn.net/weixin_46039719/article/details/122521276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [数学建模:图论模型 — 最短路模型示例 (Python 求解)](https://blog.csdn.net/qq_55851911/article/details/124776487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值