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