图中长度为k的路径的计数

43 篇文章 0 订阅
23 篇文章 0 订阅

图中长度为k的路径的计数

给定一个 n n n个顶点,边长为 1 1 1的有向图的邻接矩阵。求出这个图里长度为 k k k的路径的总数。路径中同一条边允许通过多次。 ( 1 ≤ n ≤ 100 , 1 ≤ 1 0 9 ) (1 \leq n \leq 100,1\leq10^9) (1n100,1109)

输入

n = 4
k = 2

输出

6

在这里插入图片描述

题解

假设从 u u u出发,到 v v v的路径的总数为 G k [ u ] [ v ] G_k[u][v] Gk[u][v]。首先, k = 1 k=1 k=1时的值和边数相等,因此 G 1 G_1 G1就等于图的邻接矩阵。假设我们已经得到了
G k 1 [ u ] [ w ] × G k 2 [ w ] [ v ] G_{k_{1}}[u][w]\times G_{k_{2}}[w][v] Gk1[u][w]×Gk2[w][v]
表示成矩阵的积的形式即为
G k 1 + k 2 = G k 1 G k 2 G_{k_1+k_2}=G_{k_{1}}G_{k_{2}} Gk1+k2=Gk1Gk2
因此,可以使用矩阵的幂表示出
G k = G 1 k G_k=G_{1}^{k} Gk=G1k
这个算法的复杂度为 O ( n 3 l o g k ) O(n^3 log k) O(n3logk)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值