设计最短路径 用bfs 天然带最短路径

每一个状态是 当前的阶段 和已经访问过的节点

下面是正确但是超时的代码

class Solution:
def shortestPathLength(self, graph):
"""
:type graph: List[List[int]]
:rtype: int
"""
N=len(graph) Q=collections.deque([(1 << x, x) for x in range(N)])
D=collections.defaultdict(lambda:N*N) for i in range(N):
D[1<<i,i]=0 mask=0
#listr= [i for i in range(N)]
#random.shuffle(listr) for i in range(N):
mask=mask|1<<i while Q:
a,h=Q.popleft()
d=D[a,h] if(a==mask): return d for child in graph[h]: new_a=a |(1<<child) Q.append((new_a,child)) D[new_a,child]=min(d+1,D[new_a,child])

下面的代码稍微有优化,但是这种优化是非常好的。(值得思考的优化)

归根结底是因为没有考虑好一个状态是指什么。

在这里一个状态指的是, 以前便利过的节点 和 当前的节点。

有了这个节点状态

就不用把(到达这个节点的距离作为节点的一部分加入节点中,加入会引起性能损失)

到达这个节点的距离 单独存入一个数组中做优化 如果同一个状态后来的距离反而更长 那就丢弃。

class Solution:
def shortestPathLength(self, graph):
N=len(graph)
Q=collections.deque([(1 << x, x) for x in range(N)])
D=collections.defaultdict(lambda:N*N) for i in range(N):
D[1<<i,i]=0 mask=0
for i in range(N):
mask=mask|1<<i while Q:
cover,head=Q.popleft()
d=D[cover,head] if(cover==mask):
return d for child in graph[head]: new_a=cover |(1<<child) if(d+1<D[new_a,child]):
D[new_a,child]=d+1
Q.append((new_a,child))

动态规划算法

一个数组

state[ cover ][ head ] 表示当前状态所能达到的最小距离

head 维数的遍历顺序随意

cover 的遍历循序是从小到大

因为 new_cover=cover| child 这样的话内在隐含着一个内在的顺序

这样看来 这个题目有意卡掉了那些没有注意到这种顺序的方法

"relaxation step" (for those familiar with the Bellman-Ford algorithm)

复习 Bellman-Ford algorithm#

O(V*E)

1 初始化

2 n-1 次循环 每一个循环遍历每一个边 做 relaxtion step

3 额外判断是否每一条边都 存在优化空间

第i次循环 实际上是在寻找 单源最短路径

如果n-1 次循环后还能做 relaxtion step 那么说明图中存在 负权回路

leetcode 847. Shortest Path Visiting All Nodes 无向连通图遍历最短路径的更多相关文章

  1. [LeetCode] 847. Shortest Path Visiting All Nodes 访问所有结点的最短路径

    An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...

  2. LeetCode 847. Shortest Path Visiting All Nodes

    题目链接:https://leetcode.com/problems/shortest-path-visiting-all-nodes/ 题意:已知一条无向图,问经过所有点的最短路径是多长,边权都为1 ...

  3. [Leetcode]847. Shortest Path Visiting All Nodes(BFS|DP)

    题解 题意 给出一个无向图,求遍历所有点的最小花费 分析 1.BFS,设置dis[status][k]表示遍历的点数状态为status,当前遍历到k的最小花费,一次BFS即可 2.使用DP 代码 // ...

  4. 【LeetCode】847. Shortest Path Visiting All Nodes 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/shortest ...

  5. 847. Shortest Path Visiting All Nodes

    An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...

  6. [Swift]LeetCode847. 访问所有节点的最短路径 | Shortest Path Visiting All Nodes

    An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...

  7. 最短路径遍历所有的节点 Shortest Path Visiting All Nodes

    2018-10-06 22:04:38 问题描述: 问题求解: 本题要求是求遍历所有节点的最短路径,由于本题中是没有要求一个节点只能访问一次的,也就是说可以访问一个节点多次,但是如果表征两次节点状态呢 ...

  8. AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)

    题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_C All Pairs Shortest Path Input ...

  9. LeetCode 1091. Shortest Path in Binary Matrix

    原题链接在这里:https://leetcode.com/problems/shortest-path-in-binary-matrix/ 题目: In an N by N square grid, ...

随机推荐

  1. 最全的机器学习&深度学习入门视频课程集

    资源介绍 链接:http://pan.baidu.com/s/1kV6nWJP 密码:ryfd     链接:http://pan.baidu.com/s/1dEZWlP3 密码:y82m 更多资源 ...

  2. Day 6:集合(set)

    集合(set)定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key特性:集合里面数据类型是不可变的1.可变的数据类型:列表,字典2.不可变的数据类型:数字.元组.字符串 ...

  3. 20.multi_协程方法抓取总阅读量

    # 用asyncio和aiohttp抓取博客的总阅读量 (提示:先用接又找到每篇文章的链接) # https://www.jianshu.com/u/130f76596b02 import re im ...

  4. <day004>小娜显示空白+CSV文件的基本操作+普通的代理使用

    小知识: 当小娜搜索显示空白的时候,怎么解决? 任务管理器结束小娜进程就好了= =*(多半是惯得,关掉就好了!) 任务1:CSV文件的基本操作 import csv import pandas as ...

  5. java 实现websocket(转)

    Java web项目使用webSocket   前端: <%@ page language="java" import="java.util.*" pag ...

  6. JS流程控制语句 来来回回(Do...while循环) 先执行后判断 do while结构的基本原理和while结构是基本相同的,但是它保证循环体至少被执行一次。

    来来回回(Do...while循环) do while结构的基本原理和while结构是基本相同的,但是它保证循环体至少被执行一次.因为它是先执行代码,后判断条件,如果条件为真,继续循环. do...w ...

  7. html-from提交表单

    使用form创建的仅仅是一个空白的表单, 我们还需要向form中添加不同的表单项 <!DOCTYPE html> <html> <head> <meta ch ...

  8. Loadrunner系列学习--Loadrunner架构(1)

    Loadrunner系列学习--Loadrunner架构(1) 最近在学习Loadrunner,发现一个英文网站http://www.wilsonmar.com/1loadrun.htm里面介绍的比较 ...

  9. 【9.14NOIP模拟pj】wtaxi 题解——搜索

    [9.14NOIP模拟pj]wtaxi 题目简化 有K辆车,N个人,上车给D元,只有S分钟.上车后无论多少人都要给D元,原地等多少分钟就没了多少元.求最小花费的钱. 我的思路 毫无疑问,此题可以用搜索 ...

  10. HTML - 表格标签相关

    <html> <head></head> <body> <!-- table (表格) border : 表格的边框 width : 表格的宽 h ...