Graph Algorithms(1)

邻接表的python实现(adjacency list)

def makeAdjacencyList():
    al = {}
    al[1] = [2, 4, 3]
    al[2] = [4, 5]
    al[3] = [6]
    al[4] = [6, 7, 3]
    al[5] = [4, 7]
    al[6] = []
    al[7] = [6]
    return al

拓扑排序

#入度
Ind = [0, 0, 1, 2, 3, 1, 3, 2]
# topo sort
def enqueue(v, q):
    q.append(v)

def dequeue(q):
    return q.pop(0)

def isEmpty(q):
    if len(q) == 0:
        return True
    return False

import time

def topoSort(al, Ind):
    q = []
    toBeAvoided = []
    topoNum = [0]*8
    counter = 0
    for i in range(1, 8):
        if Ind[i] == 0:
            enqueue(i, q)
    print "第一步, q = ", q
    while not isEmpty(q):
        #time.sleep(2)
        print "q = ", q
        while not isEmpty(q):
            v = dequeue(q)
            toBeAvoided.append(v)
            print "弹出v =", v
            counter += 1
            topoNum[v] = counter
            for w in al[v]:
                Ind[w ] -= 1
            print "Ind = ", Ind
        for i in range(1, 8):
            if Ind[i] == 0 and i not in toBeAvoided:
                enqueue(i, q)
                print "将%d压入q"%i
    return topoNum

al = makeAdjacencyList()
res = topoSort(al, Ind)[1:]
print "--------------------"
print "拓扑排序的结果: ", res 
第一步, q =  [1]
q =  [1]
弹出v = 1
Ind =  [0, 0, 0, 1, 2, 1, 3, 2]
将2压入q
q =  [2]
弹出v = 2
Ind =  [0, 0, 0, 1, 1, 0, 3, 2]
将5压入q
q =  [5]
弹出v = 5
Ind =  [0, 0, 0, 1, 0, 0, 3, 1]
将4压入q
q =  [4]
弹出v = 4
Ind =  [0, 0, 0, 0, 0, 0, 2, 0]
将3压入q
将7压入q
q =  [3, 7]
弹出v = 3
Ind =  [0, 0, 0, 0, 0, 0, 1, 0]
弹出v = 7
Ind =  [0, 0, 0, 0, 0, 0, 0, 0]
将6压入q
q =  [6]
弹出v = 6
Ind =  [0, 0, 0, 0, 0, 0, 0, 0]
--------------------
拓扑排序的结果:  [1, 2, 5, 4, 3, 7, 6]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 更新中。。。 第二章 2.2.2 交通规则 几种常见的渐近运行时间实例 2.2.4 三种重要情况 这里有一个 el...
    木一晟阅读 2,535评论 0 4
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,822评论 0 19
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,631评论 1 118
  • 图是一种比线性表和树更复杂的数据结构,在图中,结点之间的关系是任意的,任意两个数据元素之间都可能相关。图是一种多对...
    Alent阅读 2,347评论 1 22
  • 游学不一定要走遍名山大川,或者走遍世界各地。因为无论对成人还是孩子,游学的关键,都在于是否促进一种内在的深刻的经历...
    魏智渊阅读 1,256评论 27 24