clone-graph

来源:互联网 发布:美国特效软件 编辑:程序博客网 时间:2024/05/30 20:09

题目描述

Clone an undirected graph. Each node in the graph contains alabeland a list of itsneighbors.

解决思路

利用BFS,访问图中节点时,如果该节点没有被访问过,将其加入到map集合中并入队,并复制邻居关系,如果该节点已经被访问过,则只需要复制邻居节点即可。

java实现

class UndirectedGraphNode {    int label;    ArrayList<UndirectedGraphNode> neighbors;    UndirectedGraphNode(int x) {        label = x;        neighbors = new ArrayList<UndirectedGraphNode>();    }};public class Solution {    // BFS    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {        if (node == null)            return null;        UndirectedGraphNode clone = new UndirectedGraphNode(node.label);        // hashmap存放克隆的节点        HashMap<Integer, UndirectedGraphNode> map = new HashMap<Integer, UndirectedGraphNode>();        map.put(node.label, clone);        LinkedList<UndirectedGraphNode> q = new LinkedList<UndirectedGraphNode>();        q.add(node);        while (!q.isEmpty()) {            UndirectedGraphNode originalnode = q.remove();            UndirectedGraphNode clonenode = map.get(originalnode.label);            for (UndirectedGraphNode neighbornode : originalnode.neighbors) {                // 邻居节点已经克隆过,只需要复制邻居关系                if (map.get(neighbornode.label) != null) {                    clonenode.neighbors.add(map.get(neighbornode.label));                    continue;                }                q.add(neighbornode);                UndirectedGraphNode newnode = new UndirectedGraphNode(neighbornode.label);                map.put(newnode.label, newnode);                clonenode.neighbors.add(newnode);            }        }        return clone;    }}
0 0
原创粉丝点击