国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

剛學會深拷貝一個對象,學妹卻問我怎么深拷貝一個圖

開發 前端
既然搞懂了深淺拷貝以及其區別,我們再看看圖,圖一般用來表示節點和節點之間的關系,常分為有向圖和無向圖,在這里我們以無向圖(一旦連接即雙向)為主題。

[[386429]]

本文轉載自微信公眾號「bigsai」,作者bigsai。轉載本文請聯系bigsai公眾號。

前言

在前面,我寫過一篇Java的深淺拷貝,那是基于對象的拷貝,但放眼數據結構與算法中,你有考慮過怎么拷貝一個圖嗎?(無向圖)

在此之前,你需要對一些概念搞清楚:什么是深拷貝、淺拷貝?

淺拷貝:如果拷貝的是引用類型(非基本類型),就只會拷貝一層(嵌套的對象不會被拷貝),如果原對象發生改變,那么拷貝對象也會發生改變。

深拷貝:深拷貝的話會拷貝多層,嵌套的對象也會被拷貝出來,相當于開辟一個新的內存地址用于存放拷貝的對象。

用通俗一點(可能不完全確切)的話解釋,淺拷貝就像你的雙胞胎兄弟一樣,你們父母親人都是一樣的;而深拷貝就像另一個平行的時空,那里有另一個你的一切。

既然搞懂了深淺拷貝以及其區別,我們再看看圖,圖一般用來表示節點和節點之間的關系,常分為有向圖和無向圖,在這里我們以無向圖(一旦連接即雙向)為主題。

我們對圖的表示一般有鄰接矩陣和鄰接表,鄰接矩陣的話比較直觀的表示一個圖的連通性,操作維護更簡單,在Java中一般使用二維數組表示鄰接矩陣,數組中的值可以表示兩個節點的權值。

鄰接矩陣表示一個圖

使用鄰接矩陣雖然簡單但是有個比較差的就是浪費較多內存空間,所以很多情況還是使用鄰接表來表示一個圖,鄰接表一般是數組+鏈表的這么一個組合。但是也有一些特殊情況各個節點比較獨立的不用數組聯立。

鄰接表表示一個圖

問題分析

如果這個圖使用鄰接表表示,給你無向 連通 圖中一個節點的引用,請你返回該圖的 深拷貝(克隆),這個問題是力扣131克隆圖原題。

圖中的每個節點都包含它的值 val(int) 和其鄰居的列表(list[Node])。

  1. class Node { 
  2.     public int val; 
  3.     public List<Node> neighbors; 

圖片來源力扣

給一個節點的引用,怎么克隆這個圖呢?

如果只有這一個節點,那么克隆這個節點就好。如果這個節點只有一層鄰居,那克隆這個鄰居的列表(克隆List集合)即可。

但事實是這個節點可能有多層鄰居,并且鄰居之間可能存在著復雜聯系。

可能的一個圖

克隆整個圖,所以圖的每一個節點都要被克隆的,我們需要使用圖論的搜索算法來枚舉所有節點,并且在遍歷的過程中我們需要想辦法將節點之間的關系也克隆下來。遍歷的方法可以使用dfs或者bfs,這里使用bfs來實現。

凡是遇到苦難的時候我們模擬一下這個克隆的過程即可,通過下面這張圖可以大概了解克隆圖的過程中,最大的問題是要避免創建重復節點。即有的節點一旦被創建它的引用可能在后面會被用到的。

模擬克隆的過程

那我們該如何解決這個問題呢?怎么樣能夠快速找到對應節點的引用?

這里最好的方法是使用HashMap,其中key保存的是被克隆圖中的節點,而value是在克隆圖中所對應的節點,這樣在克隆新圖的過程中,我們遍歷被克隆圖中節點鄰居的時候,就可以用哈希判斷這個節點對應的value是否存在(即這個節點在克隆圖中是否存在)。

如果存在那么直接使用HashMap找到對應節點放入克隆圖中新創建的List中。

不過不存在說明這個節點第一次遇到,克隆這個節點,先放到hashMap中與被克隆節點對應,然后放入克隆圖中新創建的List中。

這個流程其中大概是這樣的:

其中一個過程Map的變化和作用

有了上面的分析,想必你對這個問題的解決已經有了思路和想法,下面就提供一下代碼實現。

  1. /* 
  2. // Definition for a Node. 
  3. class Node { 
  4.     public int val; 
  5.     public List<Node> neighbors; 
  6.     public Node() { 
  7.         val = 0; 
  8.         neighbors = new ArrayList<Node>(); 
  9.     } 
  10.     public Node(int _val) { 
  11.         val = _val; 
  12.         neighbors = new ArrayList<Node>(); 
  13.     } 
  14.     public Node(int _val, ArrayList<Node> _neighbors) { 
  15.         val = _val; 
  16.         neighbors = _neighbors; 
  17.     } 
  18. */ 
  19.  
  20. class Solution { 
  21.     public Node cloneGraph(Node node) { 
  22.         if(node==null
  23.                 return null
  24.         Map<Node, Node>map=new HashMap<Node, Node>();//節點映射克隆的節點 
  25.  
  26.         Queue<Node>oldqueue=new ArrayDeque<Node>();//bfs隊列 
  27.         oldqueue.add(node); 
  28.         Node value=new Node(node.val);//先將返回的節點 創建、映射 
  29.         map.put(node, value); 
  30.         while (!oldqueue.isEmpty()) { 
  31.             Node oldnode=oldqueue.poll(); 
  32.             Node newnode=map.get(oldnode);//找到這個節點對應克隆的映射(一定存在) 
  33.             List<Node>list=oldnode.neighbors;//鄰居 
  34.             List<Node>listnew=new ArrayList<Node>();//克隆鄰居 
  35.             for(Node team:list) 
  36.             { 
  37.                 if(map.containsKey(team)) 
  38.                 { 
  39.                     listnew.add(map.get(team)); 
  40.                     //點以前已經遇到,直接添加到鄰居列表 
  41.                 } 
  42.                 else {//這個鄰居第一次碰到,需要創建新節點賦予值 
  43.                     Node no=new Node(team.val); 
  44.                     map.put(team, no);//映射 
  45.                     listnew.add(no); 
  46.                     oldqueue.add(team);//這個點第一次遇到,要將它放到隊列中進行bfs搜索 
  47.                 } 
  48.             } 
  49.             newnode.neighbors=listnew;//將節點的鄰居指向list 
  50.         } 
  51.         return value; 
  52.     } 

結語

到這里,本篇的內容就結束啦,后面也會持續分享一些優秀巧妙的問題、算法,并且多多歸納總結。本篇如果有幫助的話,還請點贊、在看分享一波!

 

責任編輯:武曉燕 來源: bigsai
相關推薦

2021-09-27 11:07:11

深拷貝淺拷貝內存

2017-05-24 11:54:55

Javascript深拷貝

2020-06-23 08:41:47

JavaScript開發技術

2019-02-25 08:58:16

Python深拷貝淺拷貝

2021-01-08 06:15:09

深拷貝淺拷貝寫時拷貝

2023-05-17 08:42:46

深拷貝Golang

2017-08-16 13:30:05

Java深拷貝淺拷貝

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2023-05-17 07:36:00

淺拷貝深拷貝對象

2024-12-23 10:06:45

C#深拷貝技術

2023-09-22 12:21:33

Python深拷貝淺拷貝

2022-07-26 08:07:03

Python淺拷貝深拷貝

2020-10-12 08:35:22

JavaScript

2024-03-15 15:03:23

2009-05-19 17:28:44

深拷貝淺拷貝clone()

2025-04-27 09:45:58

JavaScript深拷貝淺拷貝

2023-01-05 18:14:32

淺拷貝深拷貝Python

2020-08-03 08:24:26

原型模式拷貝

2024-02-05 22:56:16

C++拷貝開發

2021-07-29 07:55:19

Demo 工作池
點贊
收藏

51CTO技術棧公眾號

456亚洲精品成人影院| 爱情岛亚洲播放路线| 欧美淫片网站| 日韩福利在线播放| 琪琪五月天综合婷婷| 精品99视频| 精品精品国产国产自在线| 五月激情在线| 国产成人亚洲精品狼色在线| 黑人巨大精品欧美一区免费视频 | а√天堂中文资源在线bt| 免费一区二区视频| 在线精品播放av| 最新在线你懂的| 99亚洲精品| 国产精品盗摄久久久| 精品成人av| 亚洲跨种族黑人xxx| 日本动漫同人动漫在线观看| 国产精品国产a| 丝袜制服影音先锋| 亚洲视频网在线直播| 中文字幕一区二区三区乱码| 亚洲美女15p| 国产一区二区三区久久精品| 深夜宅男网站免费进入| 国产精品99久久久久久久vr| 1卡2卡3卡精品视频| 巨茎人妖videos另类| 精品国精品国产| 波多野结衣乳巨码无在线观看| 欧美一区二区在线视频| 色戒汤唯在线| 亚洲成人黄色在线观看| av软件在线观看| 日本久久亚洲电影| 精品一区二区三区四区五区| 精品美女一区二区| 亚洲精品白浆| 久久不射电影网| 99久久综合国产精品二区| 欧美黑人性视频| 午夜精品久久| 久久婷婷国产麻豆91天堂| 九九久久国产| 亚洲成人三级在线| 日本视频一区二区| 先锋影音男人资源| 91国偷自产一区二区三区观看 | 国产精品老牛| 性欧美xxxx视频在线观看| 99日韩精品| 国产av不卡一区二区| 亚洲主播在线播放| 亚洲综合电影| 精品伊人久久大线蕉色首页| 在线不卡亚洲| 亚洲视频欧美在线| 亚洲欧美专区| 欧美精品九九久久| eeuss影院在线播放| 国产成人免费视频网站| 日韩av影视| 国产一区亚洲| 久久精品成人欧美大片古装| 蜜臀av午夜一区二区三区| 日本资源在线| 午夜精品久久久久久久久久| 国产欧美在线一区| 亚洲国产一区二区a毛片| 92国产在线视频| 亚洲欧美一区二区久久| 久久最新免费视频| 国产在线精品一区二区夜色 | 8x8x华人在线| 91女厕偷拍女厕偷拍高清| 五月天激情在线| 99porn视频在线| 好吊成人免视频| 日韩免费久久| 最近中文字幕mv第三季歌词| 久久露脸国产精品| 久久久久久久久蜜桃| 99久久99九九99九九九| 久久99中文字幕| 主播福利视频一区| 成人精品视频一区二区三区尤物| 美洲精品一卡2卡三卡4卡四卡| 卡通动漫国产精品| 亚洲三区四区| 国产成人综合亚洲| 新狼窝色av性久久久久久| 日本中文字幕电影在线免费观看| 欧洲中文字幕国产精品| 99久久精品国产网站| aaa在线观看| 欧美视频专区一二在线观看| 二区三区在线| 最近中文字幕2019免费| 91亚洲永久精品| 国产美女精品视频免费播放软件| 韩国在线视频一区| 亚洲一区亚洲二区亚洲三区| 亚洲国产一区二区在线播放| 先锋影音在线资源站91| 亚洲国产精品福利| 国产一区二区三区四区五区入口| 久久久久久久久久久视频| 久久精品欧美一区二区三区麻豆| 成人动漫在线免费观看| 国产成年人在线观看| 午夜精品久久久久久久久久久久久| 久草中文综合在线| 日韩成人在线看| 两个人hd高清在线观看| 国产精品久久久久天堂| 男人的天堂在线视频免费观看| 不卡日韩av| 欧美日韩和欧美的一区二区| 久草中文综合在线| 亚洲国产电影| 99re热精品视频| 午夜男人视频在线观看| www在线观看免费| 欧美日韩国产综合在线| 91国内在线视频| 色婷婷av一区二区三区之一色屋| 福利一区二区在线| re久久精品视频| 亚洲电影一二三区| 4438全国成人免费| 在线观看中文字幕不卡| 国产欧美一区二区三区在线看蜜臀 | 91视视频在线观看入口直接观看www | 欧美一级片免费看| 亚洲欧洲在线观看av| 精品一区二区三区免费播放| 亚洲国产一区二区精品专区| 欧美国产一区二区三区激情无套| 中文字幕乱码在线播放| 黄色在线观看网站| 调教在线观看| 爱情电影社保片一区| www.男人的天堂| 亚洲成人资源在线| 国产极品一区| 国产乱xxⅹxx国语对白| 黄页大全在线免费观看| 啊v视频在线| 素人一区二区三区| 色老板在线视频一区二区| 亚洲黄色成人| 国产精品第一页第二页第三页| 欧美视频完全免费看| 国产综合在线视频| 国产私拍一区| 免费全黄无遮挡裸体毛片| 免费**毛片在线| 一区二区在线免费播放| 亚洲国产成人精品女人| fc2成人免费人成在线观看播放| 日本高清视频一区二区| 久久久亚洲福利精品午夜| av不卡免费在线观看| 国产喷白浆一区二区三区| 欧美另类变人与禽xxxxx| 久久久999精品| 欧美久久在线| 夜色福利刺激| 成人在线免费av| 欧美三区视频| 欧美国产精品v| 日韩电影免费观看中文字幕| 亚洲淫片在线视频| 最近中文字幕mv第三季歌词| 国产精品久久久久久久久久白浆| 福利视频网站一区二区三区| 亚洲美女动态图120秒| 中文字幕99| 午夜精品一区二区三区在线视频 | 国产婷婷一区二区三区| 国产美女免费观看| h片在线播放| 午夜无码国产理论在线| 精品久久久久中文字幕小说| 成人毛片在线观看| 日韩中文字幕1| 精品制服美女久久| 欧美午夜免费电影| 欧美大片顶级少妇| 九九99久久| 国产女主播在线直播| 亚洲成人一区| 在线视频国内一区二区| 亚洲欧洲综合另类在线| 色婷婷一区二区三区四区| 中文综合在线观看| 国产精品永久免费观看| 日韩不卡中文字幕| 久久精品国产欧美亚洲人人爽 |