【发布时间】:2021-11-02 06:03:09
【问题描述】:
我有以下简单的、不连贯的、无向图:
G1 = (V1, E1)
V1 = {'a', 'b', 'c', 'd', 'e', 'f', 'k', 'l', 'x', 'y', 'z'}
E1 = {
{'a', 'b'}, {'a', 'c'},
{'d', 'e'}, {'d', 'f'},
{'k', 'l'},
{'x', 'y'}, {'x', 'z'}
}
我是这样存储的:
private final Map<String, List<String>> graph = Map.of(
"a", List.of("b", "c"),
"d", List.of("e", "f"),
"k", List.of("l"),
"x", List.of("y", "z"));
我需要实现以下方法:
public void apply(String connectFrom, List<String> connectTos)
如果我们调用它,它应该应用新连接并从连接组件输出每个连接,其中from(在本例中:'a')是:
apply("a", List.of("d", "k"));
输出应该是这样的:
['a - b','a - c','a - d','a - e','a - f','a - k','a - l','b - a','b - c','b - d','b - e','b - f','b - k','b - l','c - a','c - b','c - d','c - e','c - f','c - k','c - l','d - a','d - b','d - c','d - e','d - f','d - k','d - l','e - a','e - b','e - c','e - d','e - f','e - k','e - l','f - a','f - b','f - c','f - d','f - e','f - k','f - l','k - a','k - b','k - c','k - d','k - e','k - f','k - l','l - a','l - b','l - c','l - d','l - e','l - f','l - k']
在此示例中,输出包含图形的每个连接,排除:
['x - y', 'x - z', 'y - x', 'y - z', 'z - x', 'z - y']
因为{'x', 'y'}, {'x', 'z'} 形成一个单独的组件:
G1 = (V1, E1)
V1 = {'a', 'b', 'c', 'd', 'e', 'f', 'k', 'l', 'x', 'y', 'z'}
E1 = {
{'a', 'b'}, {'a', 'c'}, {'a', 'd'}, {'a', 'k'},
{'d', 'e'}, {'d', 'f'},
{'k', 'l'},
{'x', 'y'}, {'x', 'z'}
}
【问题讨论】:
-
您希望
apply做什么?找到一个节点与其他节点之间的连接?如果是这样,请使用 Breadth First Search 如果您希望apply找到所有连接,请使用 Depth First Search -
我可以使用 BFS 或 DFS 获得上述输出吗?
-
请阅读 BFS 和 DFS 用于什么以及如何使用。如需更多帮助,请发布树的图形表示并解释输出。 (提示在评论中添加@c0der 以将其发送给我)
标签: java algorithm data-structures graph graph-algorithm