C++实现拓扑排序(邻接表存储,栈实现)
代码如下:
#include <iostream>
#include <stack>
using namespace std;
const int N = 10010;
using vnodeType = int;
typedef struct Node
{int adj;int w;Node *next;
}Node;typedef struct Vnode
{int indegree;vnodeType v;Node *firstEdge;
}Vnode;class Graph
{public:void createGraph(){int n, m;cin >> n >> m;vnodeNum = n;edgeNum = m;for (int i = 0; i < n; i++){cout << "请输入第" << i << "个顶点要存储的信息" << endl;cin >> adjlist[i].v;adjlist[i].firstEdge = nullptr;}for (int i = 0; i < m; i++){int x, y;cin >> x >> y;Node *p = new Node;p->adj = y;p->next = adjlist[x].firstEdge;adjlist[x].firstEdge = p;}}void findIndegree(){for (int i = 0; i < vnodeNum; i++){adjlist[i].indegree = 0;}for (int i = 0; i < vnodeNum; i++){for (Node *p = adjlist[i].firstEdge; p; p = p->next){adjlist[p->adj].indegree++;}}}void Top_sort(){int cnt = vnodeNum;findIndegree();stack<int>s;for (int i = 0; i < vnodeNum; i++){if (!adjlist[i].indegree) s.push(i);}while (!s.empty()){int xx = s.top();cout << adjlist[xx].v << " ";cnt--;s.pop();for (Node *p = adjlist[xx].firstEdge; p; p = p->next){int yy = p->adj;adjlist[yy].indegree--;if (!adjlist[yy].indegree) s.push(yy);}}if (cnt) cout << "The network has a cycle" << endl;}private:int vnodeNum;int edgeNum;Vnode adjlist[N];};int main()
{Graph g;g.createGraph();g.Top_sort();return 0;
}
测试结果:
C++实现拓扑排序(邻接表存储,栈实现)相关推荐
- 邻接表存储 - 拓扑排序算法
拓扑排序:用下面的例子介绍------> ---------------------------------------------------------------------------- ...
- 第十一周项目实践2 用邻接表存储的图来实现基本应用
假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的一个顶点,输出该顶点编号: (3)计算图G中出度为0的顶点数: (4)判断图 ...
- 实现图的邻接矩阵和邻接表存储
/** * 实验题目: * 实现图的邻接矩阵和邻接表存储 * 实验目的: * 领会图的两种主要存储结构和图基本运算算法设计 * 实验内容: * ...
- 邻接表存储图的广度优先遍历
试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是邻接表存储 ...
- 数据结构实践——操作用邻接表存储的图
本文是针对[数据结构基础系列(7):图]的实践. [项目 - 操作用邻接表存储的图] 假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大 ...
- 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
以邻接表存储的有向图中是否存在有顶点Vi到Vj顶点的路径(i!=j). 问题描述:试基于图的深度优先搜索策略编写一程序,判别以邻接表存储的有向图中是否存在有顶点Vi到Vj顶点的路径(i!=j). 输入 ...
- 图的邻接表存储与深度优先遍历代码实现
Graph.h Vnode结构成员firstarc在定义时赋初值NULL,在Visual Stdio 2013下编译通过,VC6.0就不行(非静态数据成员不能初始化) #include <std ...
- 图的邻接矩阵存储和邻接表存储定义方法
一.邻接矩阵 #include <iostream> using namespace std; #define MaxVertexNum 100 //顶点最大数目//邻接矩阵存储结构 ty ...
- java邻接图_Java数据结构 - 图(邻接表存储)
邻接表 相比邻接矩阵,邻接表要更加节省空间. 邻接表存储 本文将介绍邻接表存储有向带权图.图的例子如下. 图 介绍一下邻接表 上面的图对应的邻接表如下图所示: 邻接表 前面的数组存储的是所有的顶点,每 ...
最新文章
- real6410 裸机实验- LED
- [zz]zookeeper的配置项
- Leetcode 1559二维网格图中探测环 技巧DFS|剪枝
- c访问excel 密码 api_管理EXCEL的5种服务使用渠道
- Qt4_读取和写入文本
- TIOBE 2 月编程语言排行榜:Python 逼近 C,Groovy 重回 TOP20
- SpringBoot2.0应用(五):SpringBoot2.0整合MyBatis
- 新添加到Windows Azure 技术内容的现场记录和现实世界的指导
- C语言 符号的不同意义
- 第十一次作业 - Alpha 事后诸葛亮(团队)
- 坐地铁,玩Android
- IDEA 隐藏窗口标题栏(去掉 Win10 白色标题栏)
- speedoffice(word)如何修改段落间距
- 【linux学习笔记】嵌入式linux学习笔记
- win10下如何为jdk配置环境变量
- 什么人不在生死簿_高人亲眼所见的“地狱、生死簿、三世因果”(转)阴间一直是世...
- 批量修改文件后缀名(扩展名格式),操作简单1行命令搞定!
- 操作系统、输入法和编码的理解
- contec计算机主板说明书,PCA-6007 Rev.A1 PCA-6007LV Rev.A1 研华工控机主板
- Python实现贝叶斯优化器(Bayes_opt)优化卷积神经网络回归模型(CNN回归算法)项目实战
热门文章
- 【ArcGIS遇上Python】ArcGIS10.8 Python代码批量完美实现MODIS NDVI数据格式转换和投影变换
- Git之撤销add操作
- C和指针之字符串编程练习6
- python 实现装饰器设计模式
- numpy拼接_巧用numpy切分图片
- 豆瓣评分9分+,每一部看完不禁感慨!这里是神州大地!
- 物理学上最厉害的54个男人!2400年来难以超越,没想到聚在一起后这么震撼......
- 为什么女生会有体香?
- 每个人都应该学习编程,因为它会教你如何思考
- 因为加班,谈了7年的女友跟我分手了……