【算法日记】路径算法

此算法适合带有负边权的和无负边权的有向图。算法会计算出所有可能的路径和每个路径的长度

 1 ways={
 2         "A":{
 3             "B":5,
 4             "C":2
 5         },
 6         "B":{
 7             "C":4
 8         },
 9         "C":{
10             "D":5,
11         },
12         "D":None
13     }
14
15 def findWay(ways,start,end):
16
17     wayList={}
18
19     def search(string):
20         node=string[-1]
21         if ways[node]:
22             nodeList=ways[node].keys()
23             for item in nodeList:
24                 if item==end:
25                     wayList[string+item]=getValue(string+item)
26                 else:
27                     newPath=string+item
28                     search(newPath)
29
30     def getValue(string):
31         l=len(string)
32         v=0
33         for i in range(l-1):
34             key1=string[i]
35             key2=string[i+1]
36             v+=int(ways[key1][key2])
37         return v
38
39     for key in ways[start]:
40         new=start+key
41         search(new)
42     print wayList
43
44 findWay(ways,"A","D")

输出:

负边权图:

 1 ways={
 2         "A":{
 3             "B":5,
 4             "C":2
 5         },
 6         "B":{
 7             "C":-4
 8         },
 9         "C":{
10             "D":5,
11         },
12         "D":None
13     }
14
15 def findWay(ways,start,end):
16
17     wayList={}
18
19     def search(string):
20         node=string[-1]
21         if ways[node]:
22             nodeList=ways[node].keys()
23             for item in nodeList:
24                 if item==end:
25                     wayList[string+item]=getValue(string+item)
26                 else:
27                     newPath=string+item
28                     search(newPath)
29
30     def getValue(string):
31         l=len(string)
32         v=0
33         for i in range(l-1):
34             key1=string[i]
35             key2=string[i+1]
36             v+=int(ways[key1][key2])
37         return v
38
39     for key in ways[start]:
40         new=start+key
41         search(new)
42     print wayList
43
44 findWay(ways,"A","D")

输出:

时间: 2024-11-15 15:27:42

【算法日记】路径算法的相关文章

【算法日记】Dijkstra最短路径算法

上一篇再说广度优先搜索的适合提到了图. 狄克斯拉特算法是在图的基础上增加了 加权图的概念.就是节点和节点之间是有不同距离的 1.算法实例 用Dijkstra算法找出以A为起点的单源最短路径步骤如下 算法实现 # Dijkstra算法--通过边实现松弛 # 指定一个点到其他各顶点的路径--单源最短路径 # 初始化图参数 G = {1:{1:0, 2:1, 3:12}, 2:{2:0, 3:9, 4:3}, 3:{3:0, 5:5}, 4:{3:4, 4:0, 5:13, 6:15}, 5:{5:0

路网最优路径算法总结

前段时间,关于路网最优路径算法的专题我做了一次内部分享,感兴趣的朋友可以进行查看与下载,     链接如下: http://files.cnblogs.com/files/gisorange/%E8%B7%AF%E7%BD%91%E6%9C%80%E4%BC%98%E8%B7%AF%E5%BE%84%E7%AE%97%E6%B3%95%E6%A6%82%E8%BF%B0-2015-9-22.pdf

《围住神经猫》的逃跑路径算法

关于<围住神经猫>的逃跑路径算法 <围住神经猫>是去年在微信上挺火的H5游戏,在学习unity3d的过程中我就想把这个游戏用我学习到的unity3d知识重新编写.神经猫的逃跑路径有6个方向,分别是左上,右上,左,右,左下,右下,如图A.当神经猫到达边界点(最左,最右,最上,最下的点)时,则神经猫成功逃脱. 图A 其中橙色圆点为不能到达点.如果在神经猫的逃跑路径上有橙色圆点,则称这条路径为不可通路径,反之为可通路径.逃跑算法的第一步是在6个逃跑方向寻找可通路径,再从可通路径中选择最短

我的学习路径算法

大约 严格来说.本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的 ArticleId=14124707" width="1" height="1" >算法往往暗指数据结构和算法(比如算法导论指的实际上是数据结构和算法导论),所以我觉得本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没

条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了弄懂其中的内容查阅了很多资料,所以里面应该会有引用其他帖子的小部分内容,如果原作者看到可以私信我,我会将您的帖子的地址付到下面. 3,如果有内容错误或不准确欢迎大家指正. 4,如果能帮到你,那真是太好了. 学习方法 条件随机场模型实际上是定义在时序数据上的对数线性模型,其学习方法包括极大似然估计和正则化的极大

文本比较算法Ⅱ——Needleman/Wunsch算法

在"文本比较算法Ⅰ--LD算法"中介绍了基于编辑距离的文本比较算法--LD算法. 本文介绍基于最长公共子串的文本比较算法--Needleman/Wunsch算法. 还是以实例说明:字符串A=kitten,字符串B=sitting 那他们的最长公共子串为ittn(注:最长公共子串不需要连续出现,但一定是出现的顺序一致),最长公共子串长度为4. 定义: LCS(A,B)表示字符串A和字符串B的最长公共子串的长度.很显然,LSC(A,B)=0表示两个字符串没有公共部分. Rev(A)表示反转

图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP

文转:http://blog.csdn.net/zxq2574043697/article/details/9451887 一: 最短路径算法 1. 迪杰斯特拉算法 2. 弗洛伊德算法 二: 1. 迪杰斯特拉算法 求从源点到其余各点的最短路径 依最短路径的长度递增的次序求得各条路径 路径长度最短的最短路径的特点: 在这条路径上,必定只含一条弧,并且这条弧的权值最小. 下一条路径长度次短的最短路径的特点: 它只可能有两种情况:或是直接从源点到该点(只含一条弧):或者是从源点经过顶点v1,再到达该顶

转载:算法杂货铺——分类算法之决策树(Decision tree)

作者:张洋 算法杂货铺——分类算法之决策树(Decision tree) 2010-09-19 16:30 by T2噬菌体, 44346 阅读, 29 评论, 收藏, 编辑 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法.这两种算法都以贝叶斯定理为基础,可以对分类及决策问题进行概率推断.在这一篇文章中,将讨论另一种被广泛使用的分类算法——决策树(decision tree).相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际

“Chaos”的算法之Floyd算法

倘若我们要在计算机上建立一个交通咨询系统则可以采用图的结构来表示实际的交通网络.其实现最基本的功能,求出任意两点间的最短路径, 求最短路径的经典方法有很多种,最常用的便是迪杰斯特拉算法和佛洛依德(Floyd)算法,这篇文章就着重介绍Floyd算法. 求两点之间的最短路径无外乎有两种情况,一种就是从一点直接到另一点,另一种就是从一点经过n个节点后再到另一个节点,比如说要从A到B,则有两种情况就是A直接到B,或者是从A经过N个节点后再到B,所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离

带负权图的单源最短路径算法:Bellman-Ford算法

算法简介 前面介绍过图的单源最短路径算法Dijkstra算法,然而Dijkstra算法无法判断含负权边的图的最短路.如果遇到负权,在没有负权回路存在时(负权回路的含义是,回路的权值和为负.)即便有负权的边,也可以采用Bellman-Ford算法正确求出最短路径. Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数 w是 边集 E 的映射.对图G运行Bellman-Ford算法的结果是一个布尔值,表