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)
  • 相关阅读:
    Leecode no.22 括号生成
    修改mysql数据库的时区
    Django 路由层之反向解析
    学习 Django 的几个教程网址
    leetcode周赛 242
    AcWing第二次热身赛
    AcWing夏季每日一题--最长公共子序列
    AcWIng夏季每日一题--序列最大收益
    leetcode周赛 241
    第十二届蓝桥杯C++ B组
  • 原文地址:https://www.cnblogs.com/zhangtebie/p/11185819.html
Copyright © 2011-2022 走看看