📅  最后修改于: 2023-12-03 15:25:11.406000             🧑  作者: Mango
给定一张无向图,其中每条边权均为1。求包含起点A和终点B的路径数量。注意,路径不需要是简单路径,也可以经过某个点多次。
该问题可以使用动态规划求解。设$dp[i][j]$表示以$i$为起点,以$j$为终点的路径数量。
对于任意$i,j$:
其中$n$为图中节点数目。
最终答案为$dp[A][B]$。
def find_path_num(graph, A, B):
"""
:param graph: 图的邻接矩阵表示
:param A: 起点A
:param B: 终点B
:return: 包含起点A和终点B的路径数量
"""
n = len(graph)
dp = [[0] * n for _ in range(n)]
# 初始化
for i in range(n):
for j in range(n):
if graph[i][j] == 1:
dp[i][j] = 1
# 动态规划状态转移
for k in range(n):
for i in range(n):
for j in range(n):
dp[i][j] += dp[i][k] * dp[k][j]
return dp[A][B]
时间复杂度:$O(n^3)$,其中$n$为图中节点数目。
空间复杂度:$O(n^2)$。