【重点!DFS/记忆化递归 + BFS】LeetCode 133. Clone Graph
LeetCode 133. Clone Graph
Solution1:
DFS/记忆化递归,参考网址:http://www.cnblogs.com/grandyang/p/4267628.html
真是一道记忆化递归的好题啊~
/*** Definition for undirected graph.* struct UndirectedGraphNode {* int label;* vector<UndirectedGraphNode *> neighbors;* UndirectedGraphNode(int x) : label(x) {};* };*/
class Solution {
public:UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {unordered_map<int, UndirectedGraphNode*> umap;return clone(node, umap);}private:UndirectedGraphNode *clone(UndirectedGraphNode *node, unordered_map<int, UndirectedGraphNode*> &umap) {if (!node) return node;//是针对node == NULL的情况的if (umap.count(node->label)) return umap[node->label];UndirectedGraphNode *newNode = new UndirectedGraphNode(node->label);umap[node->label] = newNode;for (int i = 0; i < node->neighbors.size(); ++i) {(newNode->neighbors).push_back(clone(node->neighbors[i], umap));}return newNode;}
};
Solution2:
BFS,先记录一下自己的错代码。。。
参考网址:https://blog.csdn.net/windylai123/article/details/78134293
/*** Definition for undirected graph.* struct UndirectedGraphNode {* int label;* vector<UndirectedGraphNode *> neighbors;* UndirectedGraphNode(int x) : label(x) {};* };*/
class Solution { //记忆化的BFS
public:UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {if (!node) return NULL;原图和新图节点一一对应unordered_map<UndirectedGraphNode *, UndirectedGraphNode *> node_map;UndirectedGraphNode *clone_node = new UndirectedGraphNode(node->label);//首先克隆第一个结点node_map[node] = clone_node; 建立map对应//建一个队列,把头结点push进去queue<UndirectedGraphNode *> node_queue;node_queue.push(node);while (!node_queue.empty()) {UndirectedGraphNode *begin = node_queue.front();node_queue.pop();vector<UndirectedGraphNode *> temp = begin->neighbors;for (int i = 0; i < temp.size(); i++) {/*如果当前节点不在map里,则要生成新节点并放入队列*/ if (!node_map.count(temp[i])) {UndirectedGraphNode * temp_node = new UndirectedGraphNode(temp[i]->label);node_map[temp[i]] = temp_node;node_queue.push(temp[i]);}//生成当前节点的邻接节点node_map[begin]->neighbors.push_back(node_map[temp[i]]);}}return clone_node;}
};
【重点!DFS/记忆化递归 + BFS】LeetCode 133. Clone Graph相关推荐
- 【DFS + 记忆化递归】LeetCode 140. Word Break II
LeetCode 140. Word Break II Solution1:我的答案 纯DFS,在第31个case时超时,还是记录一下.. class Solution { // DFS public ...
- 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways
LeetCode 91. Decode Ways Solution1:我的答案 还是记录一下,最容易想到的是DFS,但是在第223/238个case上就超时了... class Solution { ...
- 【重点!记忆化递归+DP】LeetCode 72. Edit Distance
LeetCode 72. Edit Distance 参考链接:https://zxi.mytechroad.com/blog/dynamic-programming/leetcode-72-edit ...
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
- LeetCode 514. 自由之路(记忆化递归 / DP)
文章目录 1. 题目 2. 解题 1. 题目 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...
- LeetCode 87. 扰乱字符串(记忆化递归 / DP)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 动态规划 1. 题目 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = &q ...
- LeetCode 337. 打家劫舍 III(记忆化+递归)
文章目录 1. 题目 1.1 相关题目: 2. 解题 2.1 递归 2.2 记忆化递归 1. 题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称 ...
- dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割
记忆化递归的必要性: 普通的递归可能会重复求解某一值,类似斐波那契数列.同样的子问题可能会被求解多次,这样就会很慢很慢很慢 解决方法:我们把历史求解(子问题)记录下来,如果下次需要求解子问题,那么直接 ...
- 【记忆化递归+DP】LeetCode 139. Word Break
LeetCode 139. Word Break Solution1: 记忆化递归的典型套路题 参考网址:https://zxi.mytechroad.com/blog/leetcode/leetco ...
最新文章
- hpgen9服务器f10没显示,hp gen9服务器设置
- .NETCore_生成实体
- cloudstack+ceph中解决ceph单点问题
- 信息学奥赛一本通 1032:大象喝水 | OpenJudge NOI 1.3 14
- ASP.NET企业开发框架IsLine FrameWork系列之六--DataProvider 数据访问(下)
- CV《神经风格转换》
- 十大骨传导耳机品牌,骨传导耳机品牌推荐
- html读取fbx文件,读取Fbx文件中的信息.doc
- 2000坐标系xy坐标几位_2000国家大地坐标系
- 再追哥德尔开篇---哥德尔逻辑与哲学之一
- C语言结构体字节对齐规则
- 010 editor如何复制16进制
- 微信公众号考试成绩查分系统
- ORA-01652(永久表空间临时段不能扩展情况分析)
- HTML超好看樱花飘落404页面源码+带时间
- python变成exe1023无标题_GitHub - Qing1023/Python-100-Days: Python - 100天从新手到大师
- BIT-MiniCC——parser(lab5语法分析器)
- 关于Linux的介绍与安装
- 模仿QQ的左右滑动切换界面和下拉更新的效果
- jmeter原件使用
热门文章
- VM安装rhel或linux后,声音很响,如何关闭
- java中action类是干嘛的_java中action的作用
- java执行内存_java运行时内存
- html全局事件,HTML5全局属性和事件
- 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...
- csr 蓝牙驱动_双11来临之际,推荐几款无线蓝牙耳机吧
- 斐波那契java编写_请编写一个Java程序的斐波那契数
- linuxcnc 多轴联动_科学网—【LinuxCNC】开源机床Linux操作系统 - 刘洋的博文
- 怎么用wifi进e站_忘记wifi密码怎么办,用这招可以知道电脑中的wifi密码
- github ssh 配置_搭建自己的技术博客系列 2:把 Hexo 博客部署到 GitHub 上