输入:一个无向图,各个节点的标签是0、1、2…N-1。graph[i][j]表示从节点i到节点j有一条边。
输出:返回每个节点都访问一遍需要的最少步骤。
规则:各个节点可以重复访问。
分析:
如果可以知道从每个节点开始,经过所有节点的节点的话,那选择最小值即可。dp[i][0000011]表示从节点i开始,访问过节点0,节点1后的路径长度。
刚开始dp[0][0]=dp[1][1]…=0。也就是说每个节点到自身的距离是0。
BFS遍历每一条边。每次遍历一条边,dp会发生变化。例如访问边<0,1>。那么$dp[0][3] = dp[0][1]+1=1 $ 3 =0000011,表示从节点0开始,访问了节点1,节点2.依次遍历每条边,最终得到完整的dp数组。只要找每个数组的[i][(1<<s.length)-1],比较大小即可。
代码