133. Clone Graph

来源:互联网 发布:淘宝客qq群推广软件 编辑:程序博客网 时间:2024/05/17 13:40
/** * Definition for undirected graph. * struct UndirectedGraphNode { *     int label; *     vector<UndirectedGraphNode *> neighbors; *     UndirectedGraphNode(int x) : label(x) {}; * }; */ //72ms ac //实际上不应该这么写,把hash放到类里面,那么每一次复制图都会增大hash,所克隆的图失效的时候会有相应函数进行内存回收, //而此时hash中还存储了相应的lable和指针,总之而且会对之后克隆图造成影响, //所以应该在函数内建hashclass Solution {public:    unordered_map<int,UndirectedGraphNode *> m;    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {        if(!node) return NULL;        UndirectedGraphNode *head=new UndirectedGraphNode(node->label);        for(int i=0;i<node->neighbors.size();i++)        {            if(node->neighbors[i]==node) head->neighbors.push_back(head);            else if(m.find(node->neighbors[i]->label)!=m.end() ) head->neighbors.push_back(m[node->neighbors[i]->label]);            else             {                UndirectedGraphNode *temp=cloneGraph(node->neighbors[i]);                m[node->neighbors[i]->label]=temp;                head->neighbors.push_back(temp);            }        }        return head;    }};
//72ms acclass Solution {public:    UndirectedGraphNode *copy_graph(UndirectedGraphNode *node,unordered_map<int,UndirectedGraphNode *> &m)    {        UndirectedGraphNode *head=new UndirectedGraphNode(node->label);        for(int i=0;i<node->neighbors.size();i++)        {            if(node->neighbors[i]==node) head->neighbors.push_back(head);            else if(m.find(node->neighbors[i]->label)!=m.end() ) head->neighbors.push_back(m[node->neighbors[i]->label]);            else             {                UndirectedGraphNode *temp=copy_graph(node->neighbors[i],m);                m[node->neighbors[i]->label]=temp;                head->neighbors.push_back(temp);            }        }        return head;            }    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {        if(!node) return NULL;        unordered_map<int,UndirectedGraphNode *> m;        return copy_graph(node,m);    }};
0 0
原创粉丝点击