package endual.tuopupaixu;
/**
* 拓扑排序
*
* 拓扑排序的思想虽然不寻常,但是还是很简单的
* 有两个步骤要去考虑
* 步骤1
* 找到一个没有后续的顶点(这是从有向图的角度是做了,而不能用最简单的那种图去考虑问题了)
* 顶点的后续也是一些顶点,他们是该节点的直接“下游” 也就是说这些节点与他们由一条边相连,并且
* 边的方向指向它们。如果有一条边从A指向B,那么B是A的后续
*
* 步骤2
* 从图中删除这个顶点,在列表的前面插入顶点的标记
*
* 重复步骤1和步骤2,直到所有的顶点都从图中删除。这时,列表显示的顶点顺序就是拓扑排序的结构了
* @author Endual
*
* 说明:
* 删除顶点似乎是一个极端的步骤,但是它是算法的核心,如果第一个顶点不处理,算法就不能计算出要处理的是第二个顶点。
* 如果需要,也可以在其他地方存储图的数据(顶点列表或者邻接矩阵),然后再排序完成后恢复他们就可以了
*
* 算法能够执行是因为,如果一个顶点没有后续,那么它肯定是拓扑序列的最后一个了。一旦删除它,剩下的顶点中比如有一个
* 没有后续的,所以它成为下一个拓扑序列的最后的一个了。依次类推。
*
*
* 拓扑排序算法可以既可以是连通图,也可以用于非联通图。这可以模拟另外一种两个互不相关的目标的情况。
* 例如同时获得数学学位和急救资格的证书。
*/
/**
* 环和树
*
* 环是拓扑排序无法处理的。
* 图的话=====》》》》 不是环就是树了
* @author Endual
*
*要计算是不是要环也是简单的:
* 如果N个顶点的图有超过N-1条边,那么就肯定有环的存在了。可以尝试下画一个没有环而有N个顶点的,N条边的图,这样就可以lij
* 理解了
*
* 拓扑排序必须在无环的有向图中进行的(有向无环图)
*
*
*/
public class GrapnSort {
}