当前位置:网站首页>Cloner un Graphe non recté [bfs accède à chaque bord et pas seulement aux noeuds]
Cloner un Graphe non recté [bfs accède à chaque bord et pas seulement aux noeuds]
2022-06-30 00:01:00 【Ren Lindson.】
Préface
BFSComme l'une des bases de l'opération graphique,Pour les graphiques non rectés,Peut être utiliséhashPour empêcher un noeud de traverser plus d'une fois,Provoque un cycle mort.Mais siBFSBesoin d'accéder à chaque côté,Et pas seulement les noeuds,Un noeud peut alors être consulté plusieurs fois,SimplehashLes enregistrements ne peuvent pas être mis dans la file d'attente plus d'une fois sur un noeud.
Un.、Cloner un Graphe non recté


2.、BFSAccès à chaque bord
package everyday.hash;
import java.util.*;
public class CloneGraph {
// bfs
public Node cloneGraph(Node node) {
if (null == node) return null;
Node root = new Node(node.val);
// Empêcher les graphiques non rectilignes d'aller et venir.
Set<Node> visited = new HashSet<>();
// Empêcher les noeuds qui ont rejoint la file d'attente , Encore une fois, à cause des autres bords de connexion , Rejoignez la file d'attente .( Chaque noeud a plus que 1)
Set<Node> queSet = new HashSet<>();
// - Oui.clone Les noeuds de , Empêcher l'impossibilité d'obtenir déjà newLes noeuds qui sortent.
Map<Integer, Node> cloneNodes = new HashMap<>();
Queue<Node> que = new LinkedList<>();
Queue<Node> newQue = new LinkedList<>();
que.offer(node);
newQue.offer(root);
queSet.add(node);
cloneNodes.put(root.val, root);
while (!que.isEmpty()) {
// Prendre le noeud de tête de file d'attente actuel .
Node cur = que.poll();
Node newCur = newQue.poll();
// Ce noeud est défini pour avoir accès à , Empêcher l'accès circulaire au graphique non recté .
visited.add(cur);
for (Node nei : cur.neighbors) {
// Visited, J'ai fait les noeuds et les bords , Plus besoin de faire autre chose .
if (!visited.contains(nei)) {
// Si le noeud n'a pas été créé ,Justenew Nouveau noeud .
if (!cloneNodes.containsKey(nei.val)) {
Node next = new Node(nei.val);
cloneNodes.put(next.val, next);
}
Node next = cloneNodes.get(nei.val);
// Impossible de rejoindre la file d'attente à plusieurs reprises .
if (!queSet.contains(nei)) {
que.offer(nei);
newQue.offer(next);
queSet.add(nei);
}
// Graphique non recté, Définir les bords bidirectionnels .
newCur.neighbors.add(next);
next.neighbors.add(newCur);
}
}
}
return root;
}
// Definition for a Node.
class Node {
public int val;
public List<Node> neighbors;
public Node() {
val = 0;
neighbors = new ArrayList<Node>();
}
public Node(int _val) {
val = _val;
neighbors = new ArrayList<Node>();
}
public Node(int _val, ArrayList<Node> _neighbors) {
val = _val;
neighbors = _neighbors;
}
}
}
Résumé
1)BFSAccès à chaque bord,Doublehash Tout en empêchant la circulation morte , Empêcher l'accès multilatéral au même noeud , Cela fait que le même noeud se joint à la file d'attente plus d'une fois .
Références
边栏推荐
- 这个简单的小功能,半年为我们产研团队省下213个小时
- Why is JSX syntax so popular?
- What is online account opening? In addition, is it safe to open a mobile account?
- MySQL functions and constraints
- FPGA Development (2) -- IIC communication
- Which securities company should I choose to open an account online? Also, is it safe to open an account online?
- Solr basic operation 1
- AI赋能新零售,「智」胜之道在于生态思维|数智夜话直播精选摘录
- 视频ToneMapping(HDR转SDR)中的颜色空间转换问题(BT2020转BT709,YCbCr、YUV和RGB)
- LC: maximum subarray and
猜你喜欢

How to write controller layer code gracefully?

云和恩墨盖国强,识别它、抓住它,在国产数据库沸腾以前

这次的PMP考试(6月25日),有人欢喜有人忧,原因就在这...

Machine learning: the concept and application of VC dimension

Inspiration collection · evaluation of creative writing software: flomo, obsidian memo, napkin, flowus

LC: maximum subarray and

Zhongang Mining: Fluorite helps the construction and development of lithium battery in fluorine industry

Sword finger offer 13 Range of motion of robot

After crossing, she said that the multiverse really exists

@Scheduled注解的坑,我替你踩了
随机推荐
HTAP x cloud native: tidb accelerates the release of data value and realizes data agility
如何实现搜索引擎中的拼写纠错功能——思路
New titanium cloud service won the "2022 love analysis · panoramic report of it operation and maintenance manufacturers" cloud management platform CMP representative manufacturer
modelsim的TCL脚本的define incdir命令解析
Bee common configuration
AI首席架构师9-胡晓光 《飞桨模型库与行业应用》
招商证券靠谱吗?开股票账户安全吗?
FPGA开发(2)——IIC通信
Halcon practical: design idea of solder joint detection
架构实战营模块5作业
Leetcode (633) -- sum of squares
Unity splashimage scaling problem
打造一个 API 快速开发平台,牛逼!
爬虫入门实战:斗鱼弹幕数据抓取,附送11节入门笔记
QT learning 03 birth and essence of QT
FPGA开发(1)——串口通信
solo 博客皮肤导入 skins 文件夹后出现 500 错误
Solr basic operation 1
LC: maximum subarray and
Andorid source build/envsetup.sh 该知道的细节