拓扑排序(邻接表实现)

简介: 拓扑排序(邻接表实现)

5.5 拓扑排序


5.5.1 AOV网

用有向边 < V i , V j >  表示活动V i 必须先于活动 V j 进行的这样一种关系,则将这种有向图称为顶点表示活动的网络,记为AOV网。在AOV网中,活动 V i是活动 V j的直接前驱,活动 V j 是活动 V i 的直接后继,这种前驱和后继关系具有传递性,且任何活动 V i 不能以它自己作为自己的前驱或后继。


5.5.2 拓扑排序

概念

每个顶点出现且只出现一次

若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径。


模板

/* 
有向图邻接表实现拓扑排序
*/
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#define MaxVertexNum 10
typedef int weightType;  // 权重数据类型
typedef char vertexType; // 顶点数据类型
struct EdgeNode
{
    int adjvex;
    weightType weight;
    EdgeNode *next;
};
struct VertexNode
{
    vertexType data;
    EdgeNode *firstedge;
};
struct Graph
{
    int vertexnum;
    int edgenum;
    VertexNode vertexList[MaxVertexNum];
};
void BuildGraph(Graph *G)
{
    int start, end, weight;
    EdgeNode *newnode;
    cout << "Please enter the number of vertices and edges" << endl;
    cin >> G->vertexnum >> G->edgenum;
    // 图的顶点数据
    for (int i = 1; i <= G->vertexnum; i++)
    {
        // 输入顶点名
        // cout << "Please enter the data of vertex" << i << endl;
        // cin >> G->vertexList[i].data;
        G->vertexList[i].firstedge = NULL;
    }
    // 输入权重信息
    for (int i = 1; i <= G->edgenum; i++)
    {
        cout << "Please enter the Start number, end number" << endl;
        cin >> start >> end;
        //start-->end
        newnode = new EdgeNode;
        newnode->adjvex = end;
        // newnode->weight = weight;
        newnode->next = G->vertexList[start].firstedge;
        G->vertexList[start].firstedge = newnode;
    }
}
void TopologicalSort(Graph *G)
{
    // 初始化队列
    queue<int> q;
    // 初始化入度统计表
    vector<int> indegree(G->vertexnum + 1, 0);
    for (int i = 1; i <= G->vertexnum; i++)
    {
        for (EdgeNode *j = G->vertexList[i].firstedge; j; j = j->next)
        {
            indegree[j->adjvex]++;
        }
    }
    // 将所有入度为0的顶点入队
    for (int i = 1; i <= G->vertexnum; i++)
    {
        if (indegree[i] == 0)
        {
            q.push(i);
        }
    }
    // 输出的顶点数
    int count = 0;
    // 开始搜索
    while (count < G->vertexnum)
    {
        count++;
        int v = q.front();
        cout << v << "  ";
        q.pop();
        // 将v所指向的顶点入度减一
        for (EdgeNode *w = G->vertexList[v].firstedge; w; w = w->next)
        {
            if (--indegree[w->adjvex] == 0)
            {
                q.push(w->adjvex);
            }
        }
    }
}
int main()
{
    Graph G;
    BuildGraph(&G);
    TopologicalSort(&G);
    cout << endl;
    system("pause");
    return 0;
}
/*
8 10
1 2
1 3
2 3
3 8
3 7
7 8
5 3
4 5
5 6
6 7
*/


复杂度

时间复杂度:O(∣V∣+∣E∣)

目录
相关文章
|
JavaScript 前端开发
Node-RED 规则引擎重构:添加自定义节点
Node-RED 规则引擎重构:添加自定义节点
822 1
|
SQL 前端开发 Java
SpringMVC系列(四)之SpringMVC实现文件上传和下载
SpringMVC系列(四)之SpringMVC实现文件上传和下载
|
机器学习/深度学习 PyTorch 算法框架/工具
RGCN的torch简单案例
RGCN 是指 Relational Graph Convolutional Network,是一种基于图卷积神经网络(GCN)的模型。与传统的 GCN 不同的是,RGCN 可以处理具有多种关系(边)类型的图数据,从而更好地模拟现实世界中的实体和它们之间的复杂关系。 RGCN 可以用于多种任务,例如知识图谱推理、社交网络分析、药物发现等。以下是一个以知识图谱推理为例的应用场景: 假设我们有一个知识图谱,其中包含一些实体(如人、物、地点)以及它们之间的关系(如出生于、居住在、工作于)。图谱可以表示为一个二元组 (E, R),其中 E 表示实体的集合,R 表示关系的集合,每个关系 r ∈ R
2077 0
|
算法 搜索推荐
归并排序图文详解(一篇讲透归并排序)
归并排序图文详解(一篇讲透归并排序)
归并排序图文详解(一篇讲透归并排序)
|
12月前
|
存储 弹性计算 安全
阿里云服务器ECS详解:云服务器是什么,云服务器优势和应用场景及价格参考
云服务器ECS是阿里云众多云产品中,最受用户关注的产品,阿里云服务器提供多样化的计算能力,支持x86、Arm架构,涵盖CPU、GPU等多种服务器类型,满足各种用户需求。本文为大家详细介绍阿里云服务器是什么?云服务器的优势和应用场景,以及最新价格情况,以供大家参考。
|
Java 关系型数据库 MySQL
面试官:GROUP BY和DISTINCT有什么区别?
面试官:GROUP BY和DISTINCT有什么区别?
466 0
面试官:GROUP BY和DISTINCT有什么区别?
|
决策智能 开发者
Multi-Agent实践第8期:轻松拖拽搭建多智能体应用
AgentScope Workstation令多智能体应用的搭建变得轻而易举,只需简单拖拽操作,每位用户都能快速打造出丰富多彩的应用。
|
开发框架 前端开发 JavaScript
移动应用开发新趋势:跨平台框架对比
【6月更文挑战第27天】移动应用开发趋势转向跨平台框架,如Flutter(Google,Dart,快速开发,精美UI)、React Native(Facebook,JavaScript,庞大社区,原生模块支持)、Xamarin(C#,代码共享,.NET库)、NativeScript(原生渲染,Angular/Vue支持)。选择框架时需考虑项目需求、团队技能和性能要求。
|
存储 NoSQL 分布式数据库
数据库的演进之路:从传统到现代,技术的飞跃与应用
一、引言 数据库作为数据存储和管理的核心工具,随着信息技术的快速发展,经历了从简单到复杂、从单机到分布式的演进过程
|
监控 安全 网络安全
云端防御:云计算环境下的网络安全策略与实践
【5月更文挑战第16天】 随着企业逐渐将数据和服务迁移至云平台,云计算环境的安全性成为了业界关注的焦点。本文深入探讨了在复杂多变的云服务模型中,如何通过创新的网络安全技术和策略来确保信息的完整性、机密性和可用性。文章分析了云计算环境中存在的安全挑战,并提出了相应的解决方案和最佳实践,以帮助组织构建一个既灵活又安全的云基础设施。

热门文章

最新文章