二维数组好友列表

时间:2018-05-29 11:34:09

标签: java

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

我用循环和递归解决了它但不满意

需要更好的方法/建议..休息我会实施。

2 个答案:

答案 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]);
}