[刷题]Clone Graph

来源:互联网 发布:淘宝优惠券在哪里看 编辑:程序博客网 时间:2024/06/14 10:35

[LintCode]Clone Graph

/** * Definition for undirected graph. * class UndirectedGraphNode { *     int label; *     ArrayList<UndirectedGraphNode> neighbors; *     UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); } * }; */public class Solution {    /**     * @param node: A undirected graph node     * @return: A undirected graph node     */    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {        // 2015-07-01        if (node == null) {            return null;        }                HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>();        ArrayList<UndirectedGraphNode> nodes = new ArrayList<>();                // step 1 遍历图,开辟内存,建立哈希表,新旧节点一一对应        nodes.add(node);        map.put(node, new UndirectedGraphNode(node.label));        for (int i = 0; i < nodes.size(); i++) {            UndirectedGraphNode head = nodes.get(i);            int len = head.neighbors.size();            for (int j = 0; j < len; j++) {                UndirectedGraphNode neighbor = head.neighbors.get(j);                if (!map.containsKey(neighbor)) {                    nodes.add(neighbor);                    map.put(neighbor, new UndirectedGraphNode(neighbor.label));                }            }        }        // step 2 遍历哈希表,为每一个新的节点添加neighbors        int len = nodes.size();        for (int i = 0; i < len; i++) {            UndirectedGraphNode oldNode = nodes.get(i);            UndirectedGraphNode newNode = map.get(oldNode);            for (int j = 0; j < oldNode.neighbors.size(); j++) {                newNode.neighbors.add(map.get(oldNode.neighbors.get(j)));            }        }                return map.get(node);    }}


0 0
原创粉丝点击