讲拓扑排序的概念,先来回顾一个大家熟悉的东西:技能树(图)!
因为这个特好理解,玩过暗黑或其他RPG游戏的都应该见过类似的技能树,一句话,就是学习高级技能前需要先学习之前的低级技能。
一个技能树其实是一个简单的图,你可以把它再变化一下就是一张图,即让一些高级技能间也发生联系,使得学习一种高级技能可以通过多种途径,于是这就是一个正儿八经的图了。
拓扑排序就是要排出这样一个线性序列,即“高等技能”一定在“初等技能”的后面,绝不会出现“高等技能”学完后再学“初等技能 ”的情况。
言归正传,学习拓扑排序,需要知道如下几个概念。
1、图:可以理解为网络,一个由点和线组成的网络,线段有方向称为有向图,线段无方向称为无向图。
2、AOV网络:就是 Activity On Vertex network的简称,顶点活动网,它是一个有向无环图。有向:就是指有先后顺序,比如技能树中,学习技能有先后顺序。无环:就是图里面没有首尾相接的“圈”,比如技能树中学完高技能后总不能又回到低技能的学习吧?
3、邻接矩阵:这是一种图的存储方法,用一个二维数组来来存储图的结构。该矩阵里只有0和1,Aij