图的拓扑排序——卡恩算法
拓扑排序 有向图的拓扑排序是其顶点的线性排序,使得对于从顶点u 到顶点v 的每个有向边uv ,u 在排序中都在v 之前。 在图论中,由一个 有向无环图 的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个 拓扑排序 ( Topological sorting)。 每个顶点出现且只出现一次; 若A在序列中排在B的前面,则在图中不存在从B到A的路径 。 //#include<Windows.h> #include<iostream> #include<cstring> #include<cstdio> using namespace std; const int maxn = 105; const int MAX_E = 10005; const int MAX_V = 105; struct ENode { int to; int Next; }; ENode Edegs[MAX_E]; int Head[MAX_V]; int tnt; void Add_ENode(int w, int v) { ++tnt; Edegs[tnt].to = v; Edegs[tnt].Next = Head[w]; Head[w] = tnt; /*可以拓扑排序则保证这是一个有向图*/ } int IN_degree[maxn];//记录每个点的入度; int Queue[maxn];