[leetcode] 133 Clone Graph

来源:互联网 发布:黄金k线图软件 编辑:程序博客网 时间:2024/05/29 17:48

问题描述:

Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.

OJ's undirected graph serialization:

Nodes are labeled uniquely.

We use # as a separator for each node, and , as a separator for node label and each neighbor of the node.

As an example, consider the serialized graph {0,1,2#1,2#2,2}.

The graph has a total of three nodes, and therefore contains three parts as separated by #.

  1. First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
  2. Second node is labeled as 1. Connect node 1 to node 2.
  3. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.

Visually, the graph looks like the following:

       1      / \     /   \    0 --- 2         / \         \_/

代码:

UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {  //c++        if(node == NULL)            return NULL;                    set<int> visited;        map<int,UndirectedGraphNode*> myMap;        queue<UndirectedGraphNode*> myQueue;        UndirectedGraphNode *head,*p,*temp,*one;                myQueue.push(node);        bool isFirst = true;        do        {            p = myQueue.front();            if(isFirst){                temp = new UndirectedGraphNode(p->label);                head= temp;                myMap.insert(make_pair(p->label,temp));                isFirst = false;            }            else temp = myMap[p->label];            vector<UndirectedGraphNode*> vec;            for(int i=0; i<(p->neighbors).size(); i++){                int label =(p->neighbors)[i]->label;                if(myMap.count(label)!=0)                    one = myMap[label];                else                 {                    one = new UndirectedGraphNode(label);                    myMap.insert(make_pair(label,one));                }                vec.push_back(one);                if(visited.count(label)==0)                    myQueue.push(p->neighbors[i]);            }            temp->neighbors = vec;            myQueue.pop();            visited.insert(p->label);        }while(!myQueue.empty());        return head;    }

0 0
原创粉丝点击