c语言实现拓扑排序(《数据结构》算法7.12)

拓扑排序算法(C语言实现) 拓扑排序算法只适用于有向无环图,这里给大家举一个反例,下图是一个有环图:图 7 有环图在有环图中,任意一个顶点的入度都不为 0,拓扑排序算法无法将环中的顶点全部添加到线性序列中,最终得到的序列就不是正确的拓扑序列。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,加我 q(834937624)获取教程的完整 PDF 电子版。 阅读详情
AI摘要

本文通过邻接表方法详细介绍了如何使用C语言进行数据结构中的拓扑排序,旨在输出无向图的拓扑有序序列。

邻接表+拓扑排序,输出的是无向图的拓扑有序序列。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<stack>
#define MAX_VERTEX_NUM 100
using namespace std;
int indegree[MAX_VERTEX_NUM];
stack<int>s;
typedef struct ArcNode{
	int adjvex;//该边的另一个顶点的位置 
	struct ArcNode *nextarc; //指向下一条边 
}ArcNode;
typedef struct VNode{
	int data;//顶点的值 
	ArcNode *firstarc;//指向第一条依附该顶点的边的指针 
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
	AdjList vertices;//顶点数组 
	int vexnum,arcnum;
}ALGraph;
int LocateVex(ALGraph G,int v){//定位函数 
	for(int i=0;i<G.vexnum;i++){
		if(v==G.vertices[i].data)return i;
	} 
}
void CreateDG(ALGraph &G){
	ArcNode *p;
	int i,j,k,v1,v2;
	printf("分别输入顶点个数和边的数目:\n");
	scanf("%d%d",&G.vexnum,&G.arcnum);
	printf("分别输入各个顶点值:\n");
	for(i=0;i<G.vexnum;i++){
	scanf("%d",&G.vertices[i].data);
	G.vertices[i].firstarc=NULL;//初始化 
	} 
	printf("分别输入各条弧的弧尾和弧
【数据结构与算法】拓扑排序问题C语言实现 拓扑排序是有向无环图的一种应用,在实际生活中用的很多。 比如GIS专业的课程设计,许多课程需要前置课程要求,也就是说没上过A课程、则不可能直接去学B课程,画个图表就是: 同理,我们教材中的范例:穿衣服的过程也是一个拓扑排序问题,如下表: 有关这个拓扑排序的模型构造以及解法、我们的教材有着十分详尽的描述,这里不再叙述,我们主要要解决的就是:如何编程: 从教材P194图7.33到图7.34,我们可知该问题的求解过程是: 1 寻找入度为0的顶点、标记它们并进栈; 2 出栈、然后删除该顶点; 3 返回到. 阅读详情

相关推荐

数据结构及算法C语言实现代码集[实践平台]

本文还有配套的精品资源,点击获取 简介:数据结构与算法是计算机科学的基础,C语言因其高效率和内存操作能力,常用于这些概念的实现。本代码集覆盖了各种基本数据结构和算法的C语言实现,包括图、链表、串、数组、栈、队列等,以及常见算法如排序和查找,还有图的遍历算法等。它旨在帮助学习者深入理解和实践数据结构与算法,适合编程能力提升和面试准备。读者可以通过直接运行代码示例来验证数据结构...

weixin_42509507的博客 1584

c语言实现图的拓扑排序

C语言实现图的拓扑排序

拓扑排序(C语言实现)

NULL 博文链接:https://touch-2011.iteye.com/blog/1075871

Qt OpenGL 3D 点云数据显示

在Qt中使用OpenGL显示3D点云数据是一个常见的需求,特别是在计算机视觉、机器人学和三维重建等领域。下面我将介绍一个基本的实现方案。

深之JohnChen的专栏 1238

latex使用overleaf插入多行图片

对于一般的latex模板,可以使用下面方式: (1)现在模板最前面的加入包 \usepackage{graphicx} \usepackage{subfigure} (2) 使用下面代码插入图片 \begin{figure}[htbp] \centering \subfigure[pic1.]{ \includegraphics[width=5.5cm]{pic1.png} } \quad \subfigure[pic2.]{ \includegraphics[width=5.5cm]{pic

Look Forward To 1万+

CH592F RISC-V蓝牙LED灯设计:WS2812B驱动与微信小程序控制

蓝牙低功耗(BLE)是嵌入式物联网设备主流无线通信技术,其核心在于协议栈轻量化、射频稳定性与外设协同调度。基于RISC-V内核的蓝牙SoC(如CH592F)凭借高集成度、低待机电流和免外部巴伦的射频设计,显著降低硬件复杂度与BOM成本;而WS2812B作为单线级联RGB LED,依赖微秒级精准时序,需借助定时器+DMA机制规避CPU干预,保障动态效果流畅性。该方案融合电容触摸交互、GATT服务自定义与微信小程序标准Bluetooth API对接,适用于智能照明、DIY彩灯及教学实践等场景,是BLE+LED实

weixin_31163455的博客 433

Altera USB-Blaster在Win10/Win11的驱动兼容性处理

解决Altera USB-Blaster在Windows 10和Windows 11系统下的驱动兼容性问题,详细演示如何手动安装与更新altera usb-blaster驱动安装,确保下载电缆正常识别,提升开发调试效率。

weixin_42284380的博客 1289

原神真端,原神服务端,虚拟机启动部署傻瓜式教学

没玩过抽卡 游戏想体验一下抽卡的感觉,听说原神有真端了,所以弄一个局域网的服务体验一下,这里要感谢一些服务端的分享者。

azyouyouyou的博客 1万+

金属表面粗糙度对信号的影响

之前的文章中,已经采用CST中的微带线模块进行了很多的仿真分析,本文将再次利用这些模块,从另外一个角度去探讨关于传输线的使用问题--金属的表面粗糙度。 众所周知,数据传输中,当速率越来越高时,信号在金属介质中的趋肤效应就愈发明显,能量就会更多地集中于金属的表面进行流动,此时,如果金属表面不再光滑而是凹凸不平,能量的传输过程就会产生波动,当这种波动积累到一定的量级,就会严重影响到传输线的阻抗稳定性,从而导致信号失真和传输异常。

一只豌豆象的博客 2895

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4453

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: NYOJ 题目115 城市平乱 (最短路径-迪杰斯特拉算法)
下一篇: NYOJ 题目860 又见01背包 (特别版01背包)
LiQiyaoo
博客等级 码龄11年 337粉丝 206原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值