问题定义
我们先从一个简单的问题展开:一个有向图G,包含了0,1,2,3,4五个顶点,其中边有0->1,1->2,2->0,0->3,0->4。判断是否出现环路。
解析
有向图如图所示:
第一步:把有向图转换为邻接矩阵:
有向图中1表示可达,0表示不可达。
第二步:遍历矩阵
遵循深度优先搜索到思路,我们这里默认按行进行遍历,对于第一行,起始节点就是第一行对应到那个元素0,遍历到第二个元素时发现不为0,则节点0可以到达节点1;接着以节点1作为中转点,遍历节点1对应的那一行,也就是矩阵中的第二行,发现节点1可以到达节点2;同理,继续遍历节点2所在的行,发现节点2可以到达节点0,而节点0正是起始节点,也就是发现了有向图中存在着环路。
具体代码如下:
import java.util.Arrays;
public class graph {
private static boolean result = false;
public static void main(String[] args) {
int[][] matrix = new int[][]{
{
0,1,0,