C++ 拓扑排序(邻接矩阵与邻接表)

博主分享了自己学习拓扑排序的心得,通过邻接矩阵和邻接表两种方法实现拓扑排序。尽管是新手尝试,但详细介绍了思路,期待读者的反馈和指正。
摘要由CSDN通过智能技术生成

   博主新手,最近在学习拓扑排序,查阅网上资料发现有些难懂且很多方法的代码不尽相同,于是就想着试试自己能不能写出来,经过一段时间的尝试,最终实现了拓扑排序,现在将自己的想法发表出来,可能有些瑕疵,希望各位看后不吝赐教(不知道是不是就是网上的方法,之前看网上的没看懂......)。

1.邻接矩阵方法

        思路:

            创建邻接矩阵,输入顶点数和边数,初始化所有顶点间无关(用0表示),然后手动输入有关顶点(用1表示)。
依次排查所有值,那我们可以发现:若顶点a与b之间存在关系,则有order[a][b]=1(order数组即邻接矩阵的数组)且表明a是始点,b是终点。则我们要找的即为对于a的order数组内全为0(即a只可能有出度,没有入度)。
例:
有如下图
则输出结果为:


以下为代码(尽可能的详细注释了):
#include <iostream>
#include <vector>                                                                //动态数组保存拓扑排序序列
using std::cin;
using std::cout;
using std::endl;
using std::vector;
#define max 100

/*邻接矩阵算法*/	
/*思路:初始化后输入顶点间关系,有关系的从始点到终点为1,循环检测,将全为零的一行输出,后将具有相关顶点的
偶序置为零,然后循环检查,最终输出全部顶点,若输出个数与顶点数不同,则说明有环*/
int 
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值