当前位置:网站首页>作文以记之 ~ 克隆图
作文以记之 ~ 克隆图
2022-04-21 07:19:00 【小强~】
作文以记之 ~ 克隆图
0、前言
本题是力扣上 133. 克隆图 题的题解,这个题是 BFS 和 DFS的例题,挺有意思的,虽然一开始看题的描述没怎么看懂~
1、题目描述

具体描述可点击前言中的链接进行查看!
2、解题思路
2.1 方法1 ~ 利用BFS
2.1.1 思路
利用BFS 做题的一个特点就是,需要有一个保存已被访问数据的容器,常用的如哈希表,还需有一个保存当前条件下满足要求的数据的容器,常用的如队列。基于此,该题的利用BFS的思路可如下:
- 使用一个哈希表
visited存储所有已被访问和克隆的节点。此题中的哈希表的key是原始图中的节点,value是克隆图中的对应节点。 - 将题目中未在
visited出现过的节点添加到队列,同时克隆该节点并存储到哈希表中。 - 每次从队列首部取出一个节点,遍历该节点的所有邻接点。如果
visited中有这个邻接点,即该邻接点已被访问,则从visited获得该邻接点,否则创建一个新的节点存储在visited中,并将邻接点添加到队列,以便后续查找。然后将克隆的邻接点添加到克隆图对应节点的邻接表中。重复上述操作直到队列为空,则整个图遍历结束。
2.1.2 程序代码
class Solution {
public:
unordered_map<Node*, Node*> visited;
Node* cloneGraph(Node* node) {
if (node == nullptr) {
return node;
}
visited[node] = new Node(node->val);
queue<Node*> que;//保存还没访问或还没克隆的节点
que.push(node);
while(!que.empty())
{
Node *n = que.front();
que.pop();
for(auto& nei:n->neighbors)
{
if(!visited.count(nei))
{
visited[nei] = new Node(nei->val);
que.push(nei);
}
//n代表了原图中的节点,visited[n]代表了克隆图中的节点
visited[n]->neighbors.push_back(visited[nei]);
}
}
return visited[node];
}
};
2.2 方法2 ~ 利用 DFS
2.2.1 思路
此处的思路和上述方法1中的思路相近,只不过采用了递归,这也是DFS的特点。具体思路是,设定一个哈希表visited表示已被访问和克隆的节点,当其中没有目标点的邻接点时,则创建节点并将其存入visited中,如果有,则直接返回该节点作为克隆图对应节点的邻接点。然后重复上述步骤,直至节点遍历结束!
2.2.2 程序代码
class Solution {
public:
unordered_map<Node*, Node*> visited;
Node* cloneGraph(Node* node) {
if(node == nullptr)
return node;
if(visited.count(node))
return visited[node];
Node* newNode = new Node(node->val);
visited[node] = newNode;
for(auto& n:node->neighbors)
{
newNode->neighbors.push_back(cloneGraph(n));
}
return newNode;
}
};
版权声明
本文为[小强~]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_51961114/article/details/124309183
边栏推荐
- 2022年R2移动式压力容器充装考试题模拟考试题库及模拟考试
- Codeforces Round #783 (Div. 2) ABC
- Solution of losing Beijing time zone in window system
- NAS purchase reference comparison
- 2022年电工(初级)考试题库及答案
- 显示器选购参考天梯
- C51通过esp8266连接onenet(MQTT协议)上传温湿度+控制LED
- Nail custom robot docking source code
- Unity---枚举类
- How can transformer break into the CV world and kill CNN?
猜你喜欢

三层交换机【Vlanif详解】开启OSPF与路由器互通【eNSP实现】

Display selection reference ladder

Install the go plug-in in vscode and configure the go environment to run go

什么是迭代器

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by serv

打卡:4.20 C语言篇 -(1)初识C语言 - (10)关键字typedef、static

图片素材 免费素材 图片素材网站 图片素材在哪里找 哪里有的图片素材下载 图片素材的用途 图片素材 产品图片素材网站 什么的素材可以 PPT素材

It can be downloaded to the data set running loam

迅为STM32MP157开发板编译U-Boot

【2022DASCTF X SU】 三月春季挑战赛 web复现
随机推荐
2022g3 boiler water treatment examination question bank and answers
路由器设备选型参照天梯
LVGL真的需要每个控件写代码?别天真了,知道了原理我们来拖控件吧~
PDF OCR
The interface is not restored after Fiddler changes the font
剑指offer day22 位运算(中等)
从源码角度剖析redis分布式锁
Set Google chrome dark black background
[PROJECT] small hat takeout (V)
sys. stdin. ReadLine and readlines and input ()
Codeforces Round #783 (Div. 2) ABC
安裝mongodb
Solution of losing Beijing time zone in window system
Hcip221 question bank
Install the go plug-in in vscode and configure the go environment to run go
强到离谱,Transformer为何能闯入CV界秒杀CNN?
带自己学paddle(四)
Replication of Apache skywalking SQL injection (cve-2020-9483)
Read write lock and co process communication in go language
【王者荣耀】皮肤-英雄 预测(tensorflow)