关闭

Python设计模式(十九)【图搜索模式】

标签: python设计模式搜索graphsearch
2813人阅读 评论(0) 收藏 举报
分类:

相信是成功的起点,坚持是成功的终点。

class GraphSearch:
    """
    在python模拟图搜索模式
    """
    def __init__(self, graph):
        self.graph = graph

    def find_path(self, start, end, path=None):
        path = path or []

        path.append(start)
        if start == end:
            return path
        for node in self.graph.get(start, []):
            if node not in path:
                newpath = self.find_path(node, end, path)
                if newpath:
                    return newpath

    def find_all_path(self, start, end, path=None):
        path = path or []
        path.append(start)
        if start == end:
            return [path]
        paths = []
        for node in self.graph.get(start, []):
            if node not in path:
                newpaths = self.find_all_path(node, end, path[:])
                paths.extend(newpaths)
        return paths

    def find_shortest_path(self, start, end, path=None):
        path = path or []
        path.append(start)

        if start == end:
            return path
        shortest = None
        for node in self.graph.get(start, []):
            if node not in path:
                newpath = self.find_shortest_path(node, end, path[:])
                if newpath:
                    if not shortest or len(newpath) < len(shortest):
                        shortest = newpath
        return shortest

#图用法的例子
graph = {'A': ['B', 'C'],
         'B': ['C', 'D'],
         'C': ['D'],
         'D': ['C'],
         'E': ['F'],
         'F': ['C']
         }

#新的图形搜索对象的初始化
graph1 = GraphSearch(graph)

print(graph1.find_path('A', 'D'))
print(graph1.find_all_path('A', 'D'))
print(graph1.find_shortest_path('A', 'D'))

结果如图:

这里写图片描述

0
0
查看评论

精通Python设计模式 高清完整.pdf版+源码 下载

  • 2017-05-02 09:35
  • 11.61MB
  • 下载

浅谈Java设计模式(十)桥接模式(Bridge)

前言: 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供...
  • caihongdao123
  • caihongdao123
  • 2016-07-11 09:49
  • 8486

Python中的高级设计模式

本文展示一些高级的Python设计结构和它们的使用方法。在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求、对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合适地结合在一起,从而生成具有逻辑性并易于理解的数据模型。Python的数据结构从句法上来看非常直观,并且提供...
  • zhoudaxia
  • zhoudaxia
  • 2014-04-11 17:13
  • 3249

Appium+Python+PO 设计模式 入门笔记

什么是PageObject? 属于selenium的一种设计模式,套用在appium身上了(实践表明,合适,因为selenium和appium"本是同根生")个人对于PO的理解就是,页面元素 - 页面业务操作步骤的方法 - 测试用例 (我知道抽象,大家自行谷哥了解下) 下...
  • wanglha
  • wanglha
  • 2015-04-08 09:30
  • 6264

设计模式-----COMMAND模式

COMMAND模式是最简单,最优雅的设计模式之一。COMMAND模式的使用范围非常宽广。 COMMAND模式通过对命令的封装接触了系统的逻辑互联关系和实际连接的设备之间的耦合。简单的说就是COMMAND模式可以在让对象调用时不关心调用者,而直接执行命令。 COMMAND的另一个用法是创建和执行事...
  • u013812682
  • u013812682
  • 2016-11-28 16:44
  • 386

Python设计模式——组合模式

组合模式(Composite Pattern)可用来统合类体系中的这两种对象,一种对象能够包含体系中的其他对象,另一种为基本的单元对象,并不能包含其他对象。
  • qingyunianer
  • qingyunianer
  • 2015-03-11 09:28
  • 383

Python的结构型设计模式之组合模式

组合模式,可用来统合类体系中的两种对象:一种对象能够包含体系中的其他对象,另一种不能。前者叫“组合体”,后者叫“非组合体” 白话来说,好几个东西,都是来自于同一个祖父,但是有些却结合了在一起,而结合在一起的它们,又可以用一个父亲来表示。这个父亲还能继续结合其他的小东西。 今天这个例子确实是很确切了:...
  • zy_dream
  • zy_dream
  • 2017-04-20 09:29
  • 289

23种设计模式之python实现--总结

说的写总结,结果因为找实习,搬家拖了半个多月,不过也没关系了,就是自己写给自己看的,到以后想看的时候翻出来看一看,也算是一种怀念。 先说说python吧,人们都说C/C++程序员相对来说python比较熟悉,我的感觉也是,感觉如果有C基础,加上C++的面向对象的理解,很快的就能变成一个pyer。当...
  • apple_boys
  • apple_boys
  • 2014-05-19 00:03
  • 2377

二十三种设计模式及其python实现

本文源码寄方于github:https://github.com/w392807287/Design_pattern_of_python 参考文献: 《大话设计模式》——吴强 《Python设计模式》——pythontip.com 《23种设计模式》——http://www.cnblogs.com/...
  • zheng_lan_fang
  • zheng_lan_fang
  • 2017-08-01 18:44
  • 495

python: 设计模式(design pattern)之修饰器模式(decorator)

#decotor design pattern import sys YELLOW = '\033[93m' RED = '\033[91m' NORMAL = '\033[0m' class Person(object): def __...
  • a130737
  • a130737
  • 2015-04-12 20:22
  • 931
    个人资料
    • 访问:1298274次
    • 积分:18630
    • 等级:
    • 排名:第591名
    • 原创:312篇
    • 转载:932篇
    • 译文:123篇
    • 评论:297条
    博客专栏
    文章分类
    打赏
    如果你觉得我的文章对您有用,请随意打赏。 微信 支付宝