Clone Graph

BFS

    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(node==NULL)
            return NULL;
        map<UndirectedGraphNode*, UndirectedGraphNode*> nmap;
        UndirectedGraphNode* copynode = new UndirectedGraphNode(node->label);
        nmap[node] = copynode;
        queue<UndirectedGraphNode*> q;
        q.push(node);
        
        while(!q.empty())
        {
            UndirectedGraphNode* cur = q.front();
            q.pop();
            int n = cur->neighbors.size();
            for(int i=0;i<n;i++)
            {
                if(nmap.find(cur->neighbors[i])==nmap.end()) //not created
                {
                    UndirectedGraphNode* copy = new UndirectedGraphNode(cur->neighbors[i]->label);
                    nmap[cur]->neighbors.push_back(copy);
                    nmap[cur->neighbors[i]] = copy;
                    q.push(cur->neighbors[i]);
                }else
                    nmap[cur]->neighbors.push_back(nmap[cur->neighbors[i]]);
            }
        }
            
        return copynode;

        
    }

  

posted @ 2013-10-24 22:42  summer_zhou  阅读(108)  评论(0编辑  收藏  举报