leetcode_c++:图:Clone Graph(133)
来源:互联网 发布:网络角色扮演游戏排行 编辑:程序博客网 时间:2024/05/17 01:11
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 / \ \_/
算法
DFS
#include<iostream>#include<vector>#include<algorithm>#include<unordered_map>using namespace std;// 无向图struct UndirectedGraphNode{ int label; vector<UndirectedGraphNode* > neighbors; UndirectedGraphNode(int x):label(x) {};};typedef unordered_map<int, UndirectedGraphNode*> immap;class Solution {private: immap gmap; UndirectedGraphNode* dfs(UndirectedGraphNode* node){ UndirectedGraphNode* newnode; if(gmap.find(node->label)==gmap.end()){ newnode=new UndirectedGraphNode(node->label); gmap.insert(immap::value_type(node->label,newnode)); for(auto &i:node->neighbors) newnode->neighbors.push_back(dfs(i)); }else{ newnode=gmap[node->label]; } return newnode; }public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(!node) return NULL; gmap.clear(); UndirectedGraphNode* ret=dfs(node); return ret; }};int main(){ Solution s; UndirectedGraphNode* a=new UndirectedGraphNode(0),*b; b=s.cloneGraph(a); return 0;}
class Solution {public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if (node == NULL) return NULL; //create a map, key is source node, value is clone node. map<UndirectedGraphNode*, UndirectedGraphNode*> cloneMap; //using queue for breadth first search queue<UndirectedGraphNode*> q; q.push(node); //clone the root UndirectedGraphNode* cloneNode = new UndirectedGraphNode(node->label); cloneMap[node] = cloneNode; //breadth first search while(!q.empty()){ UndirectedGraphNode* n = q.front(); q.pop(); //for each neighbors for(int i=0; i<n->neighbors.size(); i++){ UndirectedGraphNode* neighbor= n->neighbors[i]; //not existed in cloneMap if (cloneMap.find(neighbor)==cloneMap.end()){ //clone a node UndirectedGraphNode* newNode = new UndirectedGraphNode(neighbor->label); cloneMap[n]->neighbors.push_back(newNode); cloneMap[neighbor] = newNode; //put the neighbors into the queue q.push(neighbor); }else{ cloneMap[n]->neighbors.push_back(cloneMap[neighbor]); } } } return cloneNode; }};
0 0
- leetcode_c++:图:Clone Graph(133)
- LeetCode: Clone Graph [133]
- [leetcode 133]Clone Graph
- [leetcode] 133 Clone Graph
- LeetCode 133 Clone Graph
- leetcode || 133、Clone Graph
- Clone Graph Leetcode 133
- LeetCode(133) Clone Graph
- leetcode 133: Clone Graph
- Leetcode #133 Clone Graph
- 133 Clone Graph [Leetcode]
- LeetCode 133: Clone Graph
- Leetcode 133 Clone Graph
- Leetcode 133 Clone Graph
- Clone Graph 克隆图
- LeetCode(133)Clone a Graph
- [leetcode] 133 clone graph bfs
- Leetcode NO.133 Clone Graph
- 水平排列元素的底部对齐
- iOS数据库汇总-----更新不间断
- 不持有焦点的跑马灯效果TextView
- # android 系统修改/dev/bus/usb/*和串口的访问权限
- Metro
- leetcode_c++:图:Clone Graph(133)
- [leetcode]153. Find Minimum in Rotated Sorted Array
- 线程间通信-方法join的使用
- 图片传输(APP端将图片传至服务器端存储)
- mysql安装与配置(转)
- HDU-5038 Grade (2014亚洲区北京站网络赛)
- Linux下访问MySQL的数据库权限不够的问题
- RTC闹钟的中断处理方法以及程序设计
- Canny边缘检测算子原理