这是我的拓扑排序算法:C++

具体分析见注释,总体时间复杂度为O(n+e)

#include "ALDGraph.h"

#include "SqStack.h"

#include

#include

using namespace std;

//初始化inDegree[]数组,时间复杂度O(n+e)

static void findInDegree(ALDGraph G, int* inDegree)

{

for(int i = 0; i < G.vexNum; ++i)

{

ArcNode* p = G.vertexes[i].firstArc;

while(p)

{

++inDegree[p->adjVex];

p = p->nextArc;

}

}

}

Status TopologicalSort(ALDGraph G)

{

int* inDegree = new int[G.vexNum];

memset(inDegree, 0, sizeof(int)*G.vexNum);

//ERROR:注意不是memset(inDegree, 0, 20);第三个参数是总的字节数,而不是初始化元素的个数。

/*int inDegree[20];

memset(inDegree, 0, sizeof(int) * 20);*/

findInDegree(G, inDegree);

SqStack S;

InitStack_Sq(S);

//将入度为0的顶点入栈,时间复杂度为O(n)

for(int i = 0; i < G.vexNum; ++i)

{

if(0 == inDegree[i])

{

Push_Sq(S, i);

}

}

int cnt = 0;

bool first = true;

cout << "拓扑排序开始----------------\n";

cout << "拓扑排序之后的结果,如下:\n";

//拓扑排序主体, 时间复杂度为O(n+e)

while(!StackEmpty_Sq(S))

{

int i;

Pop_Sq(S, i);

if(first)

{

cout << G.vertexes[i].data;

first = false;

}

else

{

cout << " -> " << G.vertexes[i].data;

}

++cnt;

for(ArcNode* p = G.vertexes[i].firstArc; p; p = p->nextArc)

{

int k = p->adjVex;

if(0 == (--inDegree[k]))

{

Push_Sq(S, k);

}

}

}

cout << endl;

cout << "拓扑排序结束----------------\n\n";

if(cnt < G.vexNum)

{

cout << "此有向图中存在环路,拓扑排序出错" << endl;

return ERROR;

}

else

{

return OK;

}

delete[] inDegree;

}

图邻接表拓扑排序算法c语言完整,在用邻接表表示图时,拓扑排序算法时间复杂度为()...相关推荐

  1. 关联规则算法c语言样例及分析_推荐系统总结系列-关联规则算法(四)

    基于关联规则的推荐有三种方法:Apriori关联规则算法FP Tree关联规则算法:PrefixSpan关联规则算法: 关联规则挖掘推荐算法: 关联规则挖掘是一种在大规模交易中识别类似规则关系模式的通 ...

  2. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(九) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  3. 国密算法Go语言实现(详解)(十) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(十) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  4. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

  5. 图十字链表并求度c语言,第5章_西安电子科技大学出版社:算法与数据结构-C语言描述(樊希平)_doc_大学课件预览_高等教育资讯网...

    第5章 数组和广义表要点: 1.掌握数组元素存储位置的换算: 2.了解特殊矩阵地存储方法和元素存储位置计算: 3.了解广义表的长度.深度.head.tail等概念和操作和存储结构. 教材习题解答: 5 ...

  6. 最短路径之迪杰斯特拉(Dijkstra 算法)弗洛伊德算法(C语言完整代码实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  7. c语言创建一个顺序表主函数,用C语言来创建一个顺序表(数据结构部分)

    顺序表的创建需要用到结构体,构造一个结构体来存储数据,顺序表申请的内存是连续的.创建顺序表的思路按照数据的"增删改查来进行编写"下列是顺序表的创建代码 创建头文件: sqlist. ...

  8. 灰狼算法 c语言 代码,基于灰狼优化的模糊C—均值聚类算法

    谢亮亮+刘建生+朱凡 摘要:针对模糊C-均值聚类算法(FCM)存在易受初始聚类中心影响和容易陷入局部最优的问题,提出了一种将灰狼优化算法(GWO)和模糊C-均值相结合的新聚类算法(GWO-FCM).该 ...

  9. 数据结构与算法 c语言 百度网盘,【资料分享】 数据结构与算法全集(C源代码+详细注释)!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 │ │ BiTree.cpp │ │ BiTree.h │ │ LinkQueue.cpp │ │ LinkQueue.h │ │ main.cpp │ ...

  10. 有向图算法c语言,c-如何将BGL有向图用作无向图(用于布局算法...

    您确定Fruchterman-Reingold算法仅接受无向图吗?我尝试使用双向图而不是无向图从Boost documentation运行一个小示例,它编译并运行得很好. 要回答您的问题,我不确定BG ...

最新文章

  1. BeanShell使用json.jar包处理Json数据
  2. mysql中日期判断的函数_MySql判断汉字、日期、数字的函数
  3. Google Cloud API 验证
  4. 室内主题元素分析图_主题乐园包装——“树”造型案例精选分享
  5. 使用jquery ajax代替iframe
  6. MySQL约束和修改数据表知识集结
  7. C#9引入的自定义类型record
  8. android 撑满剩余空间,怎么让LinearLayout占据父布局的所有剩余空间
  9. python输出文本和值_python读取文本中数据并转化为DataFrame的实例
  10. leetcode中文版python_Python版LeetCode1.两数之和
  11. 编写高效的PyTorch代码技巧(下)
  12. 北语20春oracle数据开发2,北语20春《Oracle数据库开发》作业3题目【标准答案】
  13. 问答 请问使用OK(raw:jpg)能返回多张图片吗
  14. linux命令行终端设置tab补全文件名或路径不区分大小写(大小写不敏感)
  15. 做为程序员,我到底在恐慌什么
  16. 实验十四:雨滴传感器实验
  17. html计算平方米,平方怎么算(面积怎么算平方米)
  18. 【VTM10.0】量化之RDOQ技术
  19. 计算机管理的磁盘管理简单卷,小编教你磁盘管理新建简单卷怎么做
  20. VOS客户端动态黑名单功能配置详解

热门文章

  1. 【跳频通信】基于matlab跳频通信系统仿真【含Matlab源码 967期】
  2. 【聚类分析】基于matlab GUI K-means聚类分析【含Matlab源码 791期】
  3. 【图像融合】基于matlab curvelet变换图像融合【含Matlab源码 776期】
  4. php和java的语法区别吗_php语法同java语法的基本区别(实例项目需求,php才能熟)...
  5. python123反素数_初学python之路-day01
  6. java request.getparameter为何能取值_request.getParameter(“xxx”)的参数的取值
  7. dblink连接远程mysql_MySQL中使用federated 实现dblink 远程表访问
  8. mysql event demo_MySQL定时任务event
  9. python requirements.txt
  10. 【Xamarin】使用TLS 1.2保护Web请求