固定长度的路径数

固定长度的路径数

我们有一个有向的,未加权的图G,有n个顶点,我们有一个整数k,任务如下:对于每一对顶点(i,j),我们必须找到这些顶点之间长度为k的路径的数量。路径不必简单,也就是说,顶点和边可以在一条路径中访问任意次数。
分析:
我们假设图是用邻接矩阵指定的,即大小为n×n的矩阵G[][],其中,如果顶点i与j通过一条边相连,则每个元素G[i][j]都等于1,0为它们不通过一条边相连。下面的算法同样适用于多边的情况:如果有一对顶点(i,j)与m条边相连,则可以通过设置G[i][j]=m将其记录到邻接矩阵中。如果图形包含循环(循环是一条连接顶点和顶点本身的边),该算法也可以工作。很明显,构造的邻接矩阵如果问题的答案为k=1。它包含每对顶点之间长度为1的路径数。它包含每对顶点之间长度为1的路径数。我们将迭代地构建解决方案:假设我们知道某个k的答案。这里我们描述了如何构建k+1的答案的方法。用Ck表示k的矩阵,用Ck+1表示我们要构造的矩阵。利用下面的公式,我们可以计算出Ck+1的每一项:
在这里插入图片描述
很容易看出,这个公式只计算矩阵Ck和G的乘积:
在这里插入图片描述
因此,问题的解可以表示为:
在这里插入图片描述

固定长度的最短路径

我们得到一个有向加权图G,它有n个顶点和一个整数k,对于每一对顶点(i,j),我们必须找到由k条边组成的i和j之间最短路径的长度。
分析:

我们假设指定的图邻接矩阵, G[i][j]包含边缘的长度从顶点到顶点j。如果没有两个顶点之间的边,那么相应的矩阵的元素将被指派到∞, 显然,这种形式的邻接矩阵是k=1问题的答案。它包含每对顶点之间最短路径的长度,如果一条由一条边组成的路径不存在,则为∞。
⊙定义如下在这里插入图片描述
任务的解可以用修改后的乘法表示:
在这里插入图片描述

长度为k的路径问题的推广

上面的解可以解决固定k的问题,但是也可以适用于路径包含不超过k条边的问题。
这可以通过稍微修改输入图来实现:
我们复制每个顶点: 对于每个顶点v,我们再创建一个顶点v '并添加边(v,v ')和环(v ',v ')。i和j之间最多有k条边的路径数等于i和j '之间恰好有k+1条边的路径数,因为有一个双射映射每条路径.

加一个小小简单例子:

题目给出一个有n个节点的有向图,求该有向图中长度为k的路径条数。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
 
int e[600][600],
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值