国产伦精品一区二区三区视频免费_欧美特黄级在线_色综合久久综合网_欧美wwwwwww_日韩电影中文字幕在线观看_精品蜜桃在线看_中文字幕+乱码+中文乱码91_亚洲国产www_亚洲理论中文字幕_午夜一区在线观看

全球領先的云管理服務提供商

思普智云的管理團隊都對云有深刻的理解,從搭建到運營和咨詢,團隊成員分工明確,始終致力于為客戶提供專業的技術支持和服務。

漫畫:圖的 “最短路徑” 問題 | 技術頭條

發布時間:2019-04-12 02:14:07

技術頭條: 干貨、簡潔、多維全面。更多云計算精華知識盡在眼前,get要點、solve難題,統統不在話下!

作者:蠢萌的小灰

轉自:程序員小灰

—————? 第二天? —————

如何遍歷呢?

第一層,遍歷頂點A:

第二層, 遍歷A的鄰接頂點B和C:

第三層,遍歷頂點B的鄰接頂點D、E,遍歷頂點C的鄰接頂點F:

第四層, 遍歷頂點E的鄰接頂點G,也就是目標節點:

由此得出,圖中頂點A到G的(第一條)最短路徑是A-B-E-G:

換句話說,就是尋找從A到G之間,權值之和最小的路徑。

————————————

究竟什么是迪杰斯特拉算法?它是如何尋找圖中頂點的最短路徑呢?

這個算法的本質,是不斷刷新起點與其他各個頂點之間的?“距離表”。

讓我們來演示一下 迪杰斯特拉的詳細過程:

第1步,創建距離表。表中的Key是頂點名稱,Value是 從起點A到對應頂點的已知最短距離 。但是,一開始我們并不知道A到其他頂點的最短距離是多少,Value默認是無限大:

第2步,遍歷起點A,找到起點A的鄰接頂點B和C。從A到B的距離是5,從A到C的距離是2。把這一信息刷新到距離表當中:

第3步,從距離表中找到從A出發距離最短的點,也就是頂點C。

第4步,遍歷頂點C,找到頂點C的鄰接頂點D和F(A已經遍歷過,不需要考慮)。從C到D的距離是6,所以A到D的距離是2+6=8;從C到F的距離是8,所以從A到F的距離是2+8=10。把這一信息刷新到表中:

接下來重復第3步、第4步所做的操作:

第5步,也就是第3步的重復,從距離表中找到從A出發距離最短的點 (C已經遍歷過,不需要考慮) ,也就是頂點B。

第6步, 也就是第4步的重復, 遍歷頂點B,找到頂點B的鄰接頂點D和E(A已經遍歷過,不需要考慮)。從B到D的距離是1,所以A到D的距離是5+1=6, 小于距離表中的8 ;從B到E的距離是6,所以從A到E的距離是5+6=11。把這一信息刷新到表中:

(在第6步,A到D的距離從8刷新到6,可以看出距離表所發揮的作用。距離表通過迭代刷新,用新路徑長度取代舊路徑長度,最終可以得到從起點到其他頂點的最短距離)

第7步, 從距離表中找到從A出發距離最短的點 (B和C不用考慮) ,也就是頂點D。

第8步,遍歷頂點D,找到頂點D的鄰接頂點E和F。從D到E的距離是1,所以A到E的距離是6+1=7, 小于距離表中的11 ;從D到F的距離是2,所以從A到F的距離是6+2=8 小于距離表中的10 。把這一信息刷新到表中:

第9步,從距離表中找到從A出發距離最短的點,也就是頂點E。

第10步,遍歷頂點E,找到頂點E的鄰接頂點G。從E到G的距離是7,所以A到G的距離是7+7=14。把這一信息刷新到表中:

第11步,從距離表中找到從A出發距離最短的點,也就是頂點F。

第10步,遍歷頂點F,找到頂點F的鄰接頂點G。從F到G的距離是3,所以A到G的距離是8+3=11, 小于距離表中的14 。把這一信息刷新到表中:

就這樣,除終點以外的全部頂點都已經遍歷完畢,距離表中存儲的是從起點A到所有頂點的最短距離。顯然,從A到G的最短距離是11。(路徑:A-B-D-F-G)

按照上面的思路,我們來看一下代碼實現:

  1. /**

  2. * Dijkstra最短路徑算法

  3. */

  4. publicstaticMap<Integer,Integer> dijkstra(Graph graph,int startIndex){

  5. //創建距離表,存儲從起點到每一個頂點的臨時距離

  6. Map<Integer,Integer> distanceMap =newHashMap<Integer,Integer>();

  7. //記錄遍歷過的頂點

  8. Set<Integer> accessedSet =newHashSet<Integer>();

  9. //圖的頂點數量

  10. int size = graph.vertexes.length;

  11. //初始化最短路徑表,到達每個頂點的路徑代價默認為無窮大

  12. for(int i=1; i<size; i++){

  13. distanceMap.put(i,Integer.MAX_VALUE);

  14. }

  15. //遍歷起點,刷新距離表

  16. accessedSet.add(0);

  17. List<Edge> edgesFromStart = graph.adj[startIndex];

  18. for(Edge edge : edgesFromStart)

  19. {

  20. distanceMap.put(edge.index, edge.weight);

  21. }

  22. //主循環,重復 遍歷最短距離頂點和刷新距離表 的操作

  23. for(int i=1; i<size; i++)

  24. {

  25. //尋找最短距離頂點

  26. int minDistanceFromStart =Integer.MAX_VALUE;

  27. int minDistanceIndex =-1;

  28. for(int j=1; j<size; j++)

  29. {

  30. if(!accessedSet.contains(j)&& distanceMap.get(j)< minDistanceFromStart)

  31. {

  32. minDistanceFromStart = distanceMap.get(j);

  33. minDistanceIndex = j;

  34. }

  35. }

  36. if(minDistanceIndex ==-1){

  37. break;

  38. }

  39. //遍歷頂點,刷新距離表

  40. accessedSet.add(minDistanceIndex);

  41. for(Edge edge : graph.adj[minDistanceIndex])

  42. {

  43. if(accessedSet.contains(edge.index)){

  44. continue;

  45. }

  46. int weight = edge.weight;

  47. int preDistance = distanceMap.get(edge.index);

  48. if(weight !=Integer.MAX_VALUE &&(minDistanceFromStart+ weight < preDistance))

  49. {

  50. distanceMap.put(edge.index, minDistanceFromStart + weight);

  51. }

  52. }

  53. }

  54. return distanceMap;

  55. }

  56. publicstaticvoid main(String[] args){

  57. Graph graph =newGraph(7);

  58. initGraph(graph);

  59. Map<Integer,Integer> distanceMap = dijkstra(graph,0);

  60. int distance = distanceMap.get(6);

  61. System.out.println(distance);

  62. }

  63. /**

  64. * 圖的頂點

  65. */

  66. privatestaticclassVertex{

  67. String data;

  68. Vertex(String data){

  69. this.data = data;

  70. }

  71. }

  72. /**

  73. * 圖的邊

  74. */

  75. privatestaticclassEdge{

  76. int index;

  77. int weight;

  78. Edge(int index,int weight){

  79. this.index = index;

  80. this.weight = weight;

  81. }

  82. }

  83. /**

  84. * 圖

  85. */

  86. privatestaticclassGraph{

  87. privateVertex[] vertexes;

  88. privateLinkedList<Edge> adj[];

  89. Graph(int size){

  90. //初始化頂點和鄰接矩陣

  91. vertexes =newVertex[size];

  92. adj =newLinkedList[size];

  93. for(int i=0; i<adj.length; i++){

  94. adj[i]=newLinkedList<Edge>();

  95. }

  96. }

  97. }

  98. privatestaticvoid initGraph(Graph graph){

  99. graph.vertexes[0]=newVertex("A");

  100. graph.vertexes[1]=newVertex("B");

  101. graph.vertexes[2]=newVertex("C");

  102. graph.vertexes[3]=newVertex("D");

  103. graph.vertexes[4]=newVertex("E");

  104. graph.vertexes[5]=newVertex("F");

  105. graph.vertexes[6]=newVertex("G");

  106. graph.adj[0].add(newEdge(1,5));

  107. graph.adj[0].add(newEdge(2,2));

  108. graph.adj[1].add(newEdge(0,5));

  109. graph.adj[1].add(newEdge(3,1));

  110. graph.adj[1].add(newEdge(4,6));

  111. graph.adj[2].add(newEdge(0,2));

  112. graph.adj[2].add(newEdge(3,6));

  113. graph.adj[2].add(newEdge(5,8));

  114. graph.adj[3].add(newEdge(1,1));

  115. graph.adj[3].add(newEdge(2,6));

  116. graph.adj[3].add(newEdge(4,1));

  117. graph.adj[3].add(newEdge(5,2));

  118. graph.adj[4].add(newEdge(1,6));

  119. graph.adj[4].add(newEdge(3,1));

  120. graph.adj[4].add(newEdge(6,7));

  121. graph.adj[5].add(newEdge(2,8));

  122. graph.adj[5].add(newEdge(3,2));

  123. graph.adj[5].add(newEdge(6,3));

  124. graph.adj[6].add(newEdge(4,7));

  125. graph.adj[6].add(newEdge(5,3));

  126. }

福利

掃描添加小編微信,備注“ 姓名+公司職位 ”,加入【 云計算學習交流群 】,和志同道合的朋友們共同打卡學習!

推薦閱讀:

  • 為什么給黑洞拍照需要這么長時間?

  • V神玩起freestyle! 5位以太坊核心大咖在悉尼的演講精華全在這了! |?直擊EDCON

  • “重構”黑洞: 26歲MIT研究生的新算法?|?人物志

  • 零編程基礎的?15?歲少年,僅用?9?個月開發了?9?款?App? !

  • 京東“地震”

  • 程序員?996?再上熱搜,黑名單增至?84?家!

真香,朕在看了!
国产伦精品一区二区三区视频免费_欧美特黄级在线_色综合久久综合网_欧美wwwwwww_日韩电影中文字幕在线观看_精品蜜桃在线看_中文字幕+乱码+中文乱码91_亚洲国产www_亚洲理论中文字幕_午夜一区在线观看
国产成人精品日本亚洲专区61| 欧洲中文字幕国产精品| 亚洲国产古装精品网站| 一区二区不卡在线播放| 婷婷四房综合激情五月| 亚洲高清久久网| 国产成人精品免高潮在线观看| 欧美日韩三级在线观看| 高清不卡一区二区| 亚洲一区二区在线免费观看| 欧美精品一区二区蜜桃| 亚洲最新在线视频| 91精品麻豆日日躁夜夜躁| 99精品免费观看| 天天综合天天做天天综合| 日本精品一区二区三区视频| 日韩在线观看视频一区二区| 国产亚洲一本大道中文在线| 日本久久久久久| 亚洲激情男女视频| 日韩国产亚洲欧美| 91久久精品国产| 欧美日韩一级大片网址| 久久riav二区三区| 欧美日韩免费看| 中文 日韩 欧美| 欧美日韩国产乱码电影| 亚洲国产精品久久人人爱潘金莲| 欧美精品日韩精品| 在线精品视频小说1| 久久精品欧美| 欧美精品久久天天躁| 亚洲高清不卡av| 久久精品国产欧美激情| 婷婷夜色潮精品综合在线| 亚洲国产欧美91| 久久综合色88| 欧美精品电影在线播放| 中文字幕在线观看亚洲| 国产在线观看精品| 色综合色综合网色综合| 国产亚洲欧美视频| wwwwww在线观看| 欧美日韩中文精品| 亚洲制服丝袜一区| 韩国欧美国产1区| 精品久久人人做人人爽| 国产福利视频导航| 日韩国产一区久久| 中文网丁香综合网| 高清不卡日本v二区在线| 一区二区欧美国产| 久久久久综合网| 国产免费久久精品| 久久久久久麻豆| 激情综合色综合久久| 日韩精品一区二区亚洲av观看| 欧美日韩不卡在线视频| 欧美午夜无遮挡| 亚洲国产精品成人综合久久久 | 日韩精品―中文字幕| 日本一区二区黄色| 国产日韩欧美不卡在线| 中文字幕在线视频精品| 日韩精品小视频| 日韩欧美一卡二卡| 国产精品欧美激情在线| 国产福利不卡| 亚洲6080在线| 国产乱国产乱老熟300| 亚洲国产无线乱码在线观看| 亚洲欧美第一页| 狠狠色狠狠色综合系列| 在线看日本不卡| 欧美日韩亚洲国产另类| 中文字幕亚洲国产| 欧美三级中文字幕在线观看| 91精品视频在线播放| 欧美丝袜第一区| 亚洲欧洲日韩国产| 精品成人久久av| 欧美精品国产精品| 一区二区三区蜜桃| 国产亚洲精品美女久久久久| 一本一道久久a久久精品综合蜜臀| 久久久精品视频在线| 日韩中文不卡| 中文字幕综合在线| 99精品在线看| 国产欧美日韩中文字幕| 国产精品sm调教免费专区| 欧美精品日韩三级| 国产精久久久久| 狠狠色狠色综合曰曰| 日韩在线视频在线观看| 久久综合九九| 婷婷六月天在线| 97se狠狠狠综合亚洲狠狠| 久久久久99精品久久久久| 日韩欧美国产免费| 欧美xxxxx精品| 亚洲人成电影在线观看天堂色| 中文字幕一精品亚洲无线一区 | 91精品国产综合久久精品| 日本一区二区视频| 一区二区不卡视频在线观看| 国产欧美日韩不卡| 欧美日韩亚洲第一| 日韩视频免费观看高清在线视频| 一本一道久久a久久精品逆3p | 欧美精选午夜久久久乱码6080| 视频一区在线免费观看| 久久精品在线观看视频| 国产一级揄自揄精品视频| 欧美精品久久天天躁| www.久久精品视频| 国产黄色精品网站| 日本高清久久一区二区三区| 亚洲电影免费观看高清完整版在线 | 91麻豆精品久久久久蜜臀| 日韩中文字幕av在线| 日韩欧美亚洲国产另类| 国产v日产∨综合v精品视频 | 不卡视频一区二区| 久久久精品少妇| 亚洲精品菠萝久久久久久久| 欧美亚洲国产视频小说| 日韩精品在线免费播放| 欧美一区二区三区婷婷月色 | 一区二区三区中文字幕在线观看| 91高清国产视频| 国产剧情一区在线| 欧洲亚洲免费视频 | 九九九九九九精品| 精品写真视频在线观看| 欧美国产日韩激情| 国产v日产∨综合v精品视频| 久久夜精品va视频免费观看| 国产亚洲一区字幕| 欧美精品xxxxx| 97久久精品国产| 精品在线一区二区| 国产亚洲欧美日韩高清| 欧美精品久久99久久在免费线| 亚洲天堂日韩av| 日韩精品一区二区三区外面| 欧美国产亚洲另类动漫| 五月天激情婷婷| 欧美专区在线视频| 欧美性jizz18性欧美| 日韩久久精品电影| 99精品免费观看| 欧美日韩精品高清| 色吊一区二区三区| 国产婷婷在线观看| 国产精品久久精品视| 最近2019年中文视频免费在线观看| 一级特黄aaa大片在线观看| 91精品免费观看| 国产日韩欧美精品在线| 精品免费99久久| 精品少妇久久久| 欧美久久久精品| 在线国产99| 日韩欧美高清视频| 国产乱理伦片在线观看夜一区| 久久婷婷一区二区| 久久精品久久久久| 亚洲v日韩v综合v精品v| 精品亚洲成a人在线观看| 精品国产乱码久久久久久夜甘婷婷 | 日韩天堂在线视频| 国产成人鲁色资源国产91色综| 伊人精品视频在线观看| 一级片免费观看视频| 亚洲a区在线视频| 欧美精品乱码久久久久久按摩| 国产一区视频网站| 色综合久久综合网欧美综合网| 欧美日韩一区二区在线视频| √资源天堂中文在线| 欧美国产日韩激情| 亚洲av综合色区| www久久99| 国产va免费精品高清在线 | 欧美性极品xxxx娇小| 亚洲老司机在线| 欧美国产日本韩| 九九**精品视频免费播放| 99这里只有精品| 久久99精品国产麻豆婷婷洗澡| 精品国产污污免费网站入口| 天天综合天天干| 日韩在线 中文字幕| 最近日韩免费视频| 一区二区不卡免费视频| 日韩欧美中文在线视频| 在线日韩国产网站| 日韩免费电影网站| 精品福利一区二区三区免费视频|