1class Solution:2def shortestPathLength(self, graph: List[List[int]]) -> int:3n = len(graph)4dist = [[inf] * n for _ in range(n)]56for i, x in enumerate(graph):7dist[i][i] = 08for ii in x:9dist[i][ii] = 11011# floyd-warshall12for k in range(n):13for i in range(n):14for j in range(n):15dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])1617@cache18def fn(x, mask):19if mask == 0:20return 021ans = inf22for i in range(n):23if mask & (1 << i):24ans = min(ans, dist[x][i] + fn(i, mask ^ (1 << i)))25return ans2627return min(fn(x, (1 << n) - 1) for x in range(n))