图论算法

1、拓扑排序

KAHN算法实现:

设一个有向图,存在一个入度=0,并有出度的点;

**遍历所有点的出度和入度,找到入度为0的点,显示该点

**并且去掉图中有关该点的狐

**重复上述两个操作


执行过程中出现的情况:

**找不到入度=0的点;所有点都输出了。这个输出的序列就是拓扑序列

**找不到入度=0的点;但还有点没输出。这说明这个图有环。这些剩下的点,必然存在一个环

**在去掉狐后,可能出现很多个入度为0的点,这是就跟自己定义的选择有关系了;从这里也可以得出,拓扑序列其实是不唯一的


笔记:邻接矩阵和邻接表其实存的都应该是可达的点,因此,就是出度边所对应的



代码实现的思路(这是我自己的思路,实现起来应该很简单,但不保证效率最优;至于代码,别人写的再好,看的也费劲,还是思路来的快点):

**定义一个数据结构(JavaBean),里面

保存每个vex的名称;

//保存一个指针链表(LinkedList),存放这个点的出度点;

保存一个指针链表(LinkedList),存放这个点的入度点;

保存一个入度为0标志位;


**遍历每个入度标志位,找到为0的点,输出;

**遍历每个入度链表,去掉上个步骤的点;

**重复上述步骤,知道找不到入度为0的点;


对于无向图,也可以使用KANH算法的思想,每次删除的点是边vedge小<=1的点


DFS算法实现:

**遍历一个点后,就把这个标志位已走过,按照一头蒙到底的习惯,直到一个点没有出度为止。

**然后跳到刚刚


明天继续.....









你可能感兴趣的:(数据结构,算法,优化,遍历,应用)