2*2 Matrix
Men Friends
A B,C,D
B E,F
C A
E B
F B
G F
我需要男性朋友和好友之友列表。
例如G - > F,B,E,F,B和去除重复的F,B,E
我用循环和递归解决了它但不满意
需要更好的方法/建议..休息我会实施。
答案 0 :(得分:1)
为什么不尝试这样的事情。当然,由于你没有提供任何代码,我在设计上采取了一些自由。希望这有帮助!
private static Set<Node> getNodesFollowAllEdges(Node node) {
Set<Node> nodes = getNodesFollowAllEdges(node, new HashSet<>());
// remember to remove the original node from the set
nodes.remove(node);
return nodes;
}
private static Set<Node> getNodesFollowAllEdges(Node node, Set<Node> visited) {
if (node.getConnectedNodes().isEmpty()) {
return visited;
}
for (Node n : node.getConnectedNodes()) {
if (!visited.contains(n)) {
visited.add(n);
getNodesFollowAllEdges(n, visited);
}
}
return visited;
}
此外,提供最大搜索部门非常容易。只需添加int maxDept
并在每个递归步骤中增加它。
给出以下示例:
Node a = new Node("A");
Node b = new Node("B");
Node c = new Node("C");
Node d = new Node("D");
Node e = new Node("E");
Node f = new Node("F");
Node g = new Node("G");
a.addConnectedNodes(b, c, d);
b.addConnectedNodes(e, f);
c.addConnectedNodes(a);
e.addConnectedNodes(b);
f.addConnectedNodes(b);
g.addConnectedNodes(f);
Set<Node> friends = getNodesFollowAllEdges(a);
friends.forEach(node -> System.out.println(node.getName()));
应该给你正确的结果(忽略顺序)
B
F
E
注意:请记住,由于它是Set
,因此生成的节点可以按任何顺序排列。
答案 1 :(得分:1)
谢谢你,
我的代码是:
toArray(obj_obj) {
return Object.keys(obj_obj).map(i => obj_obj[i]);
}