【发布时间】:2021-07-28 03:47:56
【问题描述】:
我有一个从 1 到 N 的 N 个顶点和 N 条边的有向图。边由数组 A 和 B 表示。要求是找出图是否是一个循环。如果可以从某个顶点开始并沿着提供的边访问所有其他边并返回起点,则图就是一个循环。
示例:
A={1,3,2,4}
B ={4,1,3,2}
2->3->1->4
^ |
|--------|
返回真,因为我们有一个循环。
示例:
A={1,2,3,4}
B ={2,1,4,3}
1 <-> 2
3 <-> 4
返回 false 因为我们没有循环。该图有 2 个不相交的循环,每个循环长度为 2
现在我可以创建一个以键为节点、以值为连接节点的映射。
static boolean process(int[] A, int[] B, int n) {
Map<Integer, List<Integer>> map = new HashMap<>();
for (int i = 0; i < A.length; i++) {
int a = A[i];
int b = B[i];
List<Integer> list = map.getOrDefault(a, new ArrayList<>());
list.add(b);
map.put(a, list);
}
System.out.println(map);
}
现在如何识别循环?
【问题讨论】:
标签: java algorithm graph cycle