本文对今天蚂蚁金服面试中的几个问题进行简单阐述分析,望批评指正。
搜索DAG问题
问题描述:给定一个图,寻找出里面所有的有向无环图(DAG)。
问题分析:
有向无环图
在图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图(DAG图)。
解题思路
给定一个图,如下:
该图包括多个DAG有向无环图。
于是,对于整个算法,我们使用两个阶段来完成:
第一阶段:计算每个节点到其他节点的有向路径。为了防止成环,我们需要在合并时进行成环检测。
代码如下:
public class GraphDAGFinder {
private Map<Node, NodeDAGList> nodeDAGListMap = new HashMap<>();
public void findAllDAGinGraph(Set<Node> graphNodes) {
for (Node node : graphNodes) {
NodeDAGList dagList = this.findAllDAGbyNode(node);
System.out.println("NODE [" + node.getId() + "] DAGS = ");
for (NodeDAGItem item : dagList.getAllDagItems()) {
item.printDAG();
}
System.out.println(