博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 图
阅读量:6877 次
发布时间:2019-06-26

本文共 3608 字,大约阅读时间需要 12 分钟。

class Graph(object):    def __init__(self,*args,**kwargs):        self.node_neighbors = {}        self.visited = {}    def add_nodes(self,nodelist):        for node in nodelist:            self.add_node(node)    def add_node(self,node):        if not node in self.nodes():            self.node_neighbors[node] = []    def add_edge(self,edge):        u,v = edge        if(v not in self.node_neighbors[u]) and ( u not in self.node_neighbors[v]):            self.node_neighbors[u].append(v)            if(u!=v):                self.node_neighbors[v].append(u)    def nodes(self):        return self.node_neighbors.keys()    # 深度优先    def depth_first_search(self,root=None):        order = []                if root:            self.dfs(root, order)        for node in self.nodes():            if not node in self.visited:                self.dfs(node, order)        print(order)        return order            def dfs(self, node, order):        self.visited[node] = True        order.append(node)        for n in self.node_neighbors[node]:            if not n in self.visited:                self.dfs(n)    # 广度优先    def breadth_first_search(self, root=None):        queue = []        order = []        if root:            queue.append(root)            order.append(root)            self.bfs(queue, order)        for node in self.nodes():            if not node in self.visited:                queue.append(node)                order.append(node)                self.bfs(queue, order)        print(order)        return order            def bfs(self, queue, order):        while len(queue)> 0:            node  = queue.pop(0)                        self.visited[node] = True            for n in self.node_neighbors[node]:                if (not n in self.visited) and (not n in queue):                    queue.append(n)                    order.append(n)                        # 找一条路径    def find_path(graph, start, end, path=[]):        path = path + [start]        if start == end:            return path        if not graph.has_key(start):            return None        for node in graph[start]:            if node not in path:                newpath = find_path(graph, node, end, path)                if newpath: return newpath        return None            # 找所有路径    def find_all_paths(graph, start, end, path=[]):        path = path + [start]        if start == end:            return [path]        if not graph.has_key(start):            return []        paths = []        for node in graph[start]:            if node not in path:                newpaths = find_all_paths(graph, node, end, path)                for newpath in newpaths:                    paths.append(newpath)        return paths            # 找最短路径    def find_shortest_path(graph, start, end, path=[]):        path = path + [start]        if start == end:            return path        if not graph.has_key(start):            return None        shortest = None        for node in graph[start]:            if node not in path:                newpath = find_shortest_path(graph, node, end, path)                if newpath:                    if not shortest or len(newpath) < len(shortest):                        shortest = newpath        return shortestif __name__ == '__main__':    g = Graph()    g.add_nodes([i+1 for i in range(8)])    g.add_edge((1, 2))    g.add_edge((1, 3))    g.add_edge((2, 4))    g.add_edge((2, 5))    g.add_edge((4, 8))    g.add_edge((5, 8))    g.add_edge((3, 6))    g.add_edge((3, 7))    g.add_edge((6, 7))    print("nodes:", g.nodes())    order = g.breadth_first_search(1)    order = g.depth_first_search(1)

转载地址:http://vwgfl.baihongyu.com/

你可能感兴趣的文章
什么是php递归函数及简单实例讲解
查看>>
Java异常处理机制
查看>>
服务器安全狗linux版 V2.4 发布 增加网页木马扫描
查看>>
安全狗服云web端V3.4(企业服务)版上线
查看>>
在Android Library的Module中按渠道依赖
查看>>
对javascript匿名函数的理解(透彻版)
查看>>
使用virtualbox安装centos6的内置无线网卡桥接设置
查看>>
java调用http接口(HttpURLConnection的使用)
查看>>
java代码内,获得jsp产生的html
查看>>
jquery.validate remote 和 自定义验证方法
查看>>
hibernate使用sql查询
查看>>
二叉树(2)——遍历的非递归实现
查看>>
OS X 键盘快捷键
查看>>
linux下vi命令大全
查看>>
设计模式之四:访问者模式
查看>>
加密和解密
查看>>
python使用.proto文件生成service接口失败
查看>>
判断矩形是否在矩形中
查看>>
关于composer.json中require-dev和require-dev、autoload-dev和autoload的区别
查看>>
Android自定义权限
查看>>