您可以通过跟踪当前的房子和到目前为止访问过的所有房屋来尝试减少要检查的路径数量。假设你有路径[1, 2, 3, 4]和[1, 3, 2, 4],你可以检查哪一条短一些,然后继续。下面是一个使用您提供的数据的示例,它将距离存储在2D数组中,而不是dict,但原理是相同的:dist = [

[0, 74, 4109, 3047, 2266],

[74, 0, 4069, 2999, 2213],

[4109, 4069, 0, 1172, 1972],

[3047, 2999, 1172, 0, 816],

[2266, 2213, 1972, 816, 0]

]

# Helper function to calculate path length

def path_len(path):

return sum(dist[i][j] for i, j in zip(path, path[1:]))

# Set of all nodes to visit

to_visit = set(xrange(len(dist)))

# Current state {(node, visited_nodes): shortest_path}

state = {(i, frozenset([0, i])): [0, i] for i in xrange(1, len(dist[0]))}

for _ in xrange(len(dist) - 2):

next_state = {}

for position, path in state.iteritems():

current_node, visited = position

# Check all nodes that haven't been visited so far

for node in to_visit - visited:

new_path = path + [node]

new_pos = (node, frozenset(new_path))

# Update if (current node, visited) is not in next state or we found shorter path

if new_pos not in next_state or path_len(new_path) < path_len(next_state[new_pos]):

next_state[new_pos] = new_path

state = next_state

# Find the shortest path from possible candidates

shortest = min((path + [0] for path in state.itervalues()), key=path_len)

print 'path: {0}, length: {1}'.format(shortest, path_len(shortest))

它将输出最短路径之一和总距离:

^{pr2}$

请注意,对于您提供的数据,有两个长度相等的可能解决方案:[0, 2, 3, 4, 1, 0]和{}。在

php最短路径tsp,最短路径tsp算法相关推荐

  1. Java用蚁群算法求最短路径_蚁群算法最短路径java

    改进蚁群算法求解最短路径问题 袁亚博,刘羿,吴斌 [摘要]摘要:针对蚁群算法在求解最短路径问题时存在容易陷入局部最优 解的问题,对经典蚁群算法提出三方面改进.... 网络出版时间:2016-11-21 ...

  2. #1093 : 最短路径·三:SPFA算法(邻接表)

    #1093 : 最短路径·三:SPFA算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的晚上,小Hi和小Ho在吃过晚饭之后,来到了一个巨大的鬼屋! 鬼屋中一共 ...

  3. 最短路径问题:Dijkstra算法详解

    前言  Nobody can go back and start a new beginning,but anyone can start today and make a new ending.  ...

  4. 贪心算法之用优先队列解决最短路径问题(Dijkstra算法)

    1.问题 最短路径问题(Dijkstra算法)用 优先队列实现,问题描述和分析和优先队列先看前面我的几篇博客 贪心算法之最短路径问题(Dijkstra算法) C++之STL之priority_queu ...

  5. 【最短路径】之Dijkstra算法

    最短路径 单源最短路径:计算源点到其他各顶点的最短路径的长度 全局最短路径:图中任意两点的最短路径 Dijkstra.Bellman-Ford.SPFA求单源最短路径 Floyed可以求全局最短路径, ...

  6. 【最短路径】:Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法

    求最短路径最常用的算法有: Dijkstra算法.SPFA算法.Bellman-Ford算法和Floyd-Warshall算法. Dijkstra算法.SPFA算法.Bellman-Ford算法这三个 ...

  7. python广度优先算法最短路径_最短路径问题的Dijkstra算法 -python

    最短路径问题的Dijkstra算法 是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出.迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树>    .该算法常 ...

  8. c++ 单源最短路径-狄杰斯特拉算法

    文章目录 源码 输出 狄杰斯特拉算法 适用范围:没有负权重的图, 可以有环,有向无向图均可 求解问题:单源最短路径 时间复杂度:V^2 源码 #include <iostream> #in ...

  9. 图——最短路径的两种算法

    最短路径 在生活中,例如,当我们坐公交或轻轨时,都会看一下交通图,找到在哪个站下是最快能达到目的地的,也就是路径最小.考虑到交通图的有向性,例如汽车的上山下山.轮船的顺水逆水,所花费的时间或代价就不相 ...

  10. >算法笔记-动态规划-最短路径迪杰斯特拉算法

    算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言   图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...

最新文章

  1. 文件格式 tar.gz zip zp2 zip rar
  2. 开启一个新的spyder窗口
  3. golang 协程同步 简介
  4. 【收藏】哪些比较好的在线编程网站?
  5. win7让任务管理器pid显示出来的方法
  6. Keras-4 mnist With CNN
  7. 90-30-020-源码-任务调度-Kylin任务调度
  8. 实用Redis操作类
  9. Activity的四种启动模式区别
  10. supersocket缓冲区_关于supersocker的数据传输中遇到的问题
  11. tcp网络示例客户端端以及代码,演示
  12. linux命令 dstat,dstat命令
  13. 【机器学习应用】机器学习之有监督学习
  14. 2022考研肖秀荣精讲精练pdf电子版
  15. java jpg转换tif_JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
  16. 小写字母转大写代码HTML,字母大小写转换.html
  17. iOS10获得系统权限
  18. 天津大学仁爱学院ACM工作室介绍
  19. 我的世界服务器披风文件在哪,关于我的世界国际版披风导入方法与详解(联机可用...
  20. 解惑一---大数据与Oracle数据库

热门文章

  1. 敏捷实践 | 浅谈测试金字塔
  2. Nordic Thingy:52 SDK 安装及编译
  3. 胡喜:从 BASIC 到 basic ,蚂蚁金服技术要解决两个基本的计算问题
  4. oracle pga的作用,ORACLE PGA 的调整
  5. 一条SQL语句查询所有任务分数都在60以上的用户名字
  6. sql查询大于平均得分的球员的名字和得分,并追加显示平均得分的列
  7. javascript call用法及好处
  8. redis的hash怎么实现以及 rehash过程是怎样的?和JavaHashMap的rehash有什么区别,与ConcurrentHashMap扩容的策略比较?
  9. php用Ajax传递数组
  10. Spring Boot 2.x的默认日志管理与Logback配置详解