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转载版
  • 相关阅读:
    Python之matplotlib库学习
    Linux相关指令和操作
    ubuntu安装vim
    classfication中使用图像金字塔和sliding windows提高准确率
    ubuntu16.04+caffe+python接口配置
    caffe中 softmax 函数的前向传播和反向传播
    cplusplus解析
    ZStack之ZDApp_Init解析
    Z-Stack ZMain学习
    ZigBee协议学习之网络层
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035714.html
Copyright © 2011-2022 走看看