图论(二)------拓扑排序

拓扑排序是对有向无圈图的顶点的一种排序。如果存在一条vi到vj的路径,则vi排在vj前面。如果图含有圈,则拓扑排序是不可能的。

拓扑排序的两种排法:

一个简单的求拓扑排序的算法是先找出任意一个没有入边的顶点,然后显示出该顶点,并将它和它的边一起从图中删除,对图的其余部分应用同样的方法。

首先,对于每个顶点计算它的入度(入边的数量),将所有入度为0的顶点放入到一个队列中。当队列不空时,删除一个顶点v,并将与v相邻的所有顶点的入度

减1.只要一个顶点的入度降为0.就把该顶点放入队列中。

图的代码:

拓扑排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def topSort(G):
    top=[]
    queue=[]
    inDegree={}
    for v in G:
        inDegree[v]=0
    for v in G:
        for w in v.getNeighbors():
            inDegree[w]+=1
    for v in inDegree:
        if inDegree[v]==0:
            queue.append(v)
    while queue:
        v=queue.pop(0)
        top.append(v)
        for i in v.getNeighbors():
            inDegree[i]-=1
            if inDegree[i]==0:
                queue.append(i)
    return top
posted @   再见紫罗兰  阅读(1241)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示