1、拓扑排序
KAHN算法实现:
设一个有向图,存在一个入度=0,并有出度的点;
**遍历所有点的出度和入度,找到入度为0的点,显示该点
**并且去掉图中有关该点的狐
**重复上述两个操作
执行过程中出现的情况:
**找不到入度=0的点;所有点都输出了。这个输出的序列就是拓扑序列
**找不到入度=0的点;但还有点没输出。这说明这个图有环。这些剩下的点,必然存在一个环
**在去掉狐后,可能出现很多个入度为0的点,这是就跟自己定义的选择有关系了;从这里也可以得出,拓扑序列其实是不唯一的
笔记:邻接矩阵和邻接表其实存的都应该是可达的点,因此,就是出度边所对应的
代码实现的思路(这是我自己的思路,实现起来应该很简单,但不保证效率最优;至于代码,别人写的再好,看的也费劲,还是思路来的快点):
**定义一个数据结构(JavaBean),里面
保存每个vex的名称;
//保存一个指针链表(LinkedList),存放这个点的出度点;
保存一个指针链表(LinkedList),存放这个点的入度点;
保存一个入度为0标志位;
**遍历每个入度标志位,找到为0的点,输出;
**遍历每个入度链表,去掉上个步骤的点;
**重复上述步骤,知道找不到入度为0的点;
对于无向图,也可以使用KANH算法的思想,每次删除的点是边vedge小<=1的点
DFS算法实现:
**遍历一个点后,就把这个标志位已走过,按照一头蒙到底的习惯,直到一个点没有出度为止。
**然后跳到刚刚
明天继续.....