zoukankan      html  css  js  c++  java
  • 图形算法之深度优先遍历

    class SortPicture(object):
        def __init__(self):
            self.grap={}
            self.visited={}
     
        def addnode(self,node):
            if node not in self.grap:
                self.grap[node]=[]
     
        def addNodes(self,*nodelist):
            for node in nodelist:
                self.addnode(node)
     
        def addEdge(self,nodel,var=1):
            u,v=nodel
            if u == v:
                return None
            if v not in self.grap[u]:
                self.grap[u].append((v,var))
     
        def nodes(self):
            return self.grap.keys()
     
        def dsort(self,root=None):
            order=[]
            def compositor(node):#一条道走到黑
                order.append(node)
                self.visited[node]=1
                for n,v in self.grap[node]:
                    if n not in self.visited:
                        compositor(n)
            if root:
                compositor(root)
                for node in self.nodes():#把未遍历到的节点都找到挨个做顺序
                    if node not in self.visited:
                        compositor(node)
                return order
            for node in self.nodes():
                if node not in self.visited:
                    compositor(node)
            return order
     
    if __name__=="__main__":
        s=SortPicture()
        s.addNodes(1,2,3,4,5)
        s.addEdge((1,2))
        s.addEdge((1,3))
        s.addEdge((1,5))
        s.addEdge((3,4))
        print s.dsort()
        s.visited={}
        print s.dsort(2)
  • 相关阅读:
    c++ 设计模式6 (Decorator 装饰模式)
    c++ 设计模式7 (Bridge 桥模式)
    c++ 设计模式8 (Factory Method 工厂方法)
    c++ 设计模式9 (Abstract Factory 抽象工厂模式)
    C++类设计2(Class with pointer members)
    C++类设计1(Class without pointer members)
    算法总结—链表
    C++对象内存模型1(堆栈模型)
    PHP 页面编码声明方法详解(header或meta)
    php变量与数组相互转换的方法(extract与compact
  • 原文地址:https://www.cnblogs.com/zhangtebie/p/11185819.html
Copyright © 2011-2022 走看看