zoukankan      html  css  js  c++  java
  • 【编程思想】【设计模式】【其他模式】graph_search

    Python版

    https://github.com/faif/python-patterns/blob/master/other/graph_search.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    ""
    
    class GraphSearch:
    
        """Graph search emulation in python, from source
        http://www.python.org/doc/essays/graphs/"""
    
        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
    
    # example of graph usage
    graph = {'A': ['B', 'C'],
             'B': ['C', 'D'],
             'C': ['D'],
             'D': ['C'],
             'E': ['F'],
             'F': ['C']
             }
    
    # initialization of new graph search object
    graph1 = GraphSearch(graph)
    
    
    print(graph1.find_path('A', 'D'))
    print(graph1.find_all_path('A', 'D'))
    print(graph1.find_shortest_path('A', 'D'))
    
    ### OUTPUT ###
    # ['A', 'B', 'C', 'D']
    # [['A', 'B', 'C', 'D'], ['A', 'B', 'D'], ['A', 'C', 'D']]
    # ['A', 'B', 'D']
    Python转载版
  • 相关阅读:
    C#加密算法汇总
    解决无法连接到visual studio开发服务器的问题
    javascript
    js仿移动端的下拉刷新,上拉加载更多。
    博客园第一篇博文——做一个思考行动派
    $("<div />")代表的意思
    ini_set 设置php配置项 在windows和linux下的不同
    Java入门1
    Java入门2
    jQuery获取元素上一个、下一个、父元素、子元素
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035714.html
Copyright © 2011-2022 走看看