图邻接表拓扑排序算法c语言完整,在用邻接表表示图时,拓扑排序算法时间复杂度为()...
这是我的拓扑排序算法: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语言完整,在用邻接表表示图时,拓扑排序算法时间复杂度为()...相关推荐
- 关联规则算法c语言样例及分析_推荐系统总结系列-关联规则算法(四)
基于关联规则的推荐有三种方法:Apriori关联规则算法FP Tree关联规则算法:PrefixSpan关联规则算法: 关联规则挖掘推荐算法: 关联规则挖掘是一种在大规模交易中识别类似规则关系模式的通 ...
- 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)
国密算法Go语言实现(详解)(九) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...
- 国密算法Go语言实现(详解)(十) ——SM2(椭圆曲线公钥密码算法)
国密算法Go语言实现(详解)(十) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...
- C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...
c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...
- 图十字链表并求度c语言,第5章_西安电子科技大学出版社:算法与数据结构-C语言描述(樊希平)_doc_大学课件预览_高等教育资讯网...
第5章 数组和广义表要点: 1.掌握数组元素存储位置的换算: 2.了解特殊矩阵地存储方法和元素存储位置计算: 3.了解广义表的长度.深度.head.tail等概念和操作和存储结构. 教材习题解答: 5 ...
- 最短路径之迪杰斯特拉(Dijkstra 算法)弗洛伊德算法(C语言完整代码实现)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- c语言创建一个顺序表主函数,用C语言来创建一个顺序表(数据结构部分)
顺序表的创建需要用到结构体,构造一个结构体来存储数据,顺序表申请的内存是连续的.创建顺序表的思路按照数据的"增删改查来进行编写"下列是顺序表的创建代码 创建头文件: sqlist. ...
- 灰狼算法 c语言 代码,基于灰狼优化的模糊C—均值聚类算法
谢亮亮+刘建生+朱凡 摘要:针对模糊C-均值聚类算法(FCM)存在易受初始聚类中心影响和容易陷入局部最优的问题,提出了一种将灰狼优化算法(GWO)和模糊C-均值相结合的新聚类算法(GWO-FCM).该 ...
- 数据结构与算法 c语言 百度网盘,【资料分享】 数据结构与算法全集(C源代码+详细注释)!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 │ │ BiTree.cpp │ │ BiTree.h │ │ LinkQueue.cpp │ │ LinkQueue.h │ │ main.cpp │ ...
- 有向图算法c语言,c-如何将BGL有向图用作无向图(用于布局算法...
您确定Fruchterman-Reingold算法仅接受无向图吗?我尝试使用双向图而不是无向图从Boost documentation运行一个小示例,它编译并运行得很好. 要回答您的问题,我不确定BG ...
最新文章
- BeanShell使用json.jar包处理Json数据
- mysql中日期判断的函数_MySql判断汉字、日期、数字的函数
- Google Cloud API 验证
- 室内主题元素分析图_主题乐园包装——“树”造型案例精选分享
- 使用jquery ajax代替iframe
- MySQL约束和修改数据表知识集结
- C#9引入的自定义类型record
- android 撑满剩余空间,怎么让LinearLayout占据父布局的所有剩余空间
- python输出文本和值_python读取文本中数据并转化为DataFrame的实例
- leetcode中文版python_Python版LeetCode1.两数之和
- 编写高效的PyTorch代码技巧(下)
- 北语20春oracle数据开发2,北语20春《Oracle数据库开发》作业3题目【标准答案】
- 问答 请问使用OK(raw:jpg)能返回多张图片吗
- linux命令行终端设置tab补全文件名或路径不区分大小写(大小写不敏感)
- 做为程序员,我到底在恐慌什么
- 实验十四:雨滴传感器实验
- html计算平方米,平方怎么算(面积怎么算平方米)
- 【VTM10.0】量化之RDOQ技术
- 计算机管理的磁盘管理简单卷,小编教你磁盘管理新建简单卷怎么做
- VOS客户端动态黑名单功能配置详解
热门文章
- 【跳频通信】基于matlab跳频通信系统仿真【含Matlab源码 967期】
- 【聚类分析】基于matlab GUI K-means聚类分析【含Matlab源码 791期】
- 【图像融合】基于matlab curvelet变换图像融合【含Matlab源码 776期】
- php和java的语法区别吗_php语法同java语法的基本区别(实例项目需求,php才能熟)...
- python123反素数_初学python之路-day01
- java request.getparameter为何能取值_request.getParameter(“xxx”)的参数的取值
- dblink连接远程mysql_MySQL中使用federated 实现dblink 远程表访问
- mysql event demo_MySQL定时任务event
- python requirements.txt
- 【Xamarin】使用TLS 1.2保护Web请求