美文网首页Python设计模式
Python设计模式 - 图搜索模式

Python设计模式 - 图搜索模式

作者: jumo | 来源:发表于2020-02-21 10:54 被阅读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'))

    相关文章

      网友评论

        本文标题:Python设计模式 - 图搜索模式

        本文链接:https://www.haomeiwen.com/subject/soaqqhtx.html