LeetCode133. Clone Graph
2016-03-22 20:04
204 查看
题目:
https://leetcode.com/problems/clone-graph/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 #.
First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
Second node is labeled as 1. Connect node 1 to node 2.
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 / \ \_/
思路:
题意:克隆一个图。BFS遍历图,一边遍历,一边完成克隆。用map记录原来图的节点和克隆图的节点情况,防止克隆过的节点再被new一次。每copy一个原节点,就把原节点与克隆节点放入map中,原节点与克隆节点对应。如果后面的遍历遇到在map中的原节点,表明这个原节点已经被copy过了,不用新new一个节点来再次copy。
代码:
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */ class Solution { public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(node==NULL){ return NULL; } UndirectedGraphNode* cur=NULL; UndirectedGraphNode* start=NULL; UndirectedGraphNode* connect=NULL; queue<UndirectedGraphNode*> q; q.push(node); unordered_map<UndirectedGraphNode*,UndirectedGraphNode*> m; start=new UndirectedGraphNode (node->label); m[node]=start; while(!q.empty()){ cur=q.front(); q.pop(); int len=cur->neighbors.size(); for(int i=0;i<len;i++){ connect=cur->neighbors[i]; if(m.find(connect)==m.end()){ UndirectedGraphNode* nodeCopy=new UndirectedGraphNode(connect->label); m[connect]=nodeCopy; q.push(connect); } m[cur]->neighbors.push_back(m[connect]);//与原节点对应的克隆节点添加相邻节点 } } return start; } };
相关文章推荐
- 初学图论-Kahn拓扑排序算法(Kahn's Topological Sort Algorithm)
- 初学图论-Bellman-Ford单源最短路径算法
- 初学图论-DAG单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- 封装好的Folyd建图,C++源码
- LCA模板
- 图论学习笔记之一——Floyd算法
- Surrounded Regions
- Word Ladder, Gray Code
- UVA 11624
- HDU1495
- HDU2612 Find a way
- HDU1241 Oil Deposits
- Hdu2444二分图
- 最少步数BFS
- 【LCA】SPOJ QTREE2
- 转v_JULY_v的 BFS和DFS优先搜索算法
- poj 3249 Test for Job 最长路
- HDU 2544