精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java生成樹結構各點之間最短路徑算法

開發 后端 算法
先說二叉樹,就是一個樹形結構,每個點和兩個點連接,越往下數量越多,形狀看起來就像一棵樹一樣,故得名二叉樹,二叉樹用于數據結構可以快速搜索,節約資源提高效率。

先說二叉樹,就是一個樹形結構,每個點和兩個點連接,越往下數量越多,形狀看起來就像一棵樹一樣,故得名二叉樹,二叉樹用于數據結構可以快速搜索,節約資源提高效率。 每兩點之間只有一條路徑,無需計算,當然用下述算法一樣可以計算的出來。

二叉樹圖:

再說多叉樹,二叉樹變種,顧名思義,每個點可以和N個點相連罷了。 同樣,每兩點之間只有一條路徑,無需計算,當然用下述算法一樣可以計算的出來,也是在極其蛋疼的情況下。

如圖:

生成樹 就是多叉樹的變種,每一個點都和N個點連接 上下左右都無所謂 亂七八糟一團 最后結果就是隨便斷一個點 其他各點之間還是有路徑可以相連的

如圖:

此圖屬于最小生成樹,線程情況可能極其混亂與復雜,放一張我用來測試的圖,不完全屬于生成樹,介于多叉與生成之間。

再說下路由表的概念,現實網絡結構就類似于上面這張測試圖,要把信息從一臺機器上發送到另一臺機器上,就要找到一條最短路徑(當然現實情況還有許多突發情況需要考慮,這只是最基本的情況)。 其實我覺得吧,干嘛非要自己機器上計算,光存個路由表就得占多大空間去了,就每次需要發送給別人信息的情況下,找自己相鄰節點問他們去最終目的地的路徑cost,選個最小的發過去完事了,每個人都問下一步要,最后總是能要到最終目的地的,而且本機只需要知道的是下一跳是誰就行,完全不需要保存整個路由信息。

那么,既然非要在本機上計算,那就算給丫看。

思想一樣,一步一步問下面要下去。

(代碼后面有添加路徑信息和刪除路由信息時候的計算原則)

首先: 咱得先把所有的路徑信息描述出來對吧,總不能扔給計算機一張圖讓人家自己看去吧(沒準以后技術發展發展就真可以了)。

用語句描述起來的話,簡單點說,就是一個點*相鄰的另一個點*他們之間的cost。

例如此圖: 假設每兩點間cost是1。

A*B*1

A*C*1

因為是雙向連接 所以還需要

B*A*1

C*A*1

所以此算法如果存在單向連接一樣可以計算。

把這些連接信息存進一個string數組中。

例如:String[] s = {"A*B*1", "B*A*1", "B*A*1", "C*A*1"}

順序無所謂,do what ever you want!

第二步,重點來了,就用上面說的那個思想,從頭開始一步一步找下去,每一個點都問他直接連接的所有點(當然要除了問他的那個點):你去最終目的地要多少個cost,最后的結果就是從終點那一步,一步一步往前計算下去,最小的留下,其他的扔掉。 典型迭代思想。 一個迭代 全部搞定。

先把string[] 搞成一個list,方便下面使用。

有一點需要注意的是:IMPORTANT!!! 有可能會出現重復。

像下面這個情況:A要去E的最短路徑。

A問B要,B問C要,C問D要,D可能又去問B要了。

所以另外還需要一個list去儲存已經路過的點了,每次找都永遠不回頭,只要前面出現過就不回去。

不怕這一次找到不一定是最短的,最后綜合起來以后肯定是最短的,因為最終是每條路都會走一次。

OK,看算法吧,傳進來一個list(儲存所有路徑信息的) 一個點(自己) 一個目點 計算出下一跳的點(也包括所話費的cost)。

當然這個算法不是最優的,會有重復的計算,會最短路徑選擇第一次找到那個(應該搞成隨機的,這樣不會每次去那個點都走這條路,讓別的路也來分擔一下)

僅供參考,歡迎交流。

JAVA版:

(Vector就是list)

  1. public class FindNextRout {   
  2. private Vector al;   
  3. private String sourcePort;   
  4. private String destPort;   
  5. private String nextPort;   
  6. public FindNextRout(Vector al, String sourcePort, String destPort) {  
  7.  this.al = al;  
  8.  this.sourcePort = sourcePort;  
  9.  this.destPort = destPort;  
  10.  NextRout();  
  11.  }  
  12.  public String getNextPort() {  
  13.  return nextPort;  
  14.  }  
  15.  public void NextRout() {  
  16.  int a = -1;  
  17.  String rout = "";  
  18.  for (Object item : al) {  
  19.  ArrayList all = new ArrayList();  
  20.  String[] ss = (item + "").split("\\*");  
  21.  all.add(ss[0]);  
  22.  if (sourcePort.equals(ss[0])) {  
  23.  if (ss[1].equals(destPort)) {  
  24.  int b = Integer.parseInt(ss[2]);  
  25.  if (b < a || a == -1) {  
  26.  a = b;  
  27.  nextPort = ss[1];  
  28.  }  
  29.  } else {  
  30.  int b = getLeastCost(all, ss[1], destPort);  
  31.  int c = b + Integer.parseInt(ss[2]);  
  32.  if (b != -1) {  
  33.  if (a == -1) {  
  34.  a = c;  
  35.  nextPort = ss[1];  
  36.  } else {  
  37.  if (c < a) {  
  38.  a = c;  
  39.  nextPort = ss[1];  
  40.  }  
  41.  }  
  42.  }  
  43.  }  
  44.  }  
  45.  }  
  46.    
  47.  }  
  48.    
  49.  public int getLeastCost(ArrayList all, String sourcePort, String destPort) {  
  50.  int a = -1;  
  51.  if (!all.contains(sourcePort)) {  
  52.  all.add(sourcePort);  
  53.  for (Object item : al) {  
  54.  String[] ss = (item + "").split("\\*");  
  55.  if (sourcePort.equals(ss[0])) {  
  56.  if (!all.contains(ss[1])) {  
  57.  if (ss[1].equals(destPort)) {  
  58.  int b = Integer.parseInt(ss[2]);  
  59.  if (b < a || a == -1) {  
  60.  a = b;  
  61.  }  
  62.  } else {  
  63.  int b = getLeastCost(all, ss[1], destPort);  
  64.  int c = b + Integer.parseInt(ss[2]);  
  65.  if (b != -1) {  
  66.  if (a == -1) {  
  67.  a = c;  
  68.  } else {  
  69.  if (c < a) {  
  70.  a = c;  
  71.  }  
  72.  }  
  73.  }  
  74.  }  
  75.  }  
  76.  }  
  77.  }  
  78.    
  79.  }  
  80.  return a;  
  81.  }  
  82.  } 

Python版:(感謝張東方同學幫忙翻譯成Python的)

  1. import os,sys  
  2. from Tool import *   
  3. class FindNextAddress:  
  4. def __init__(self,destAddress,UI):  
  5. try:  
  6. self.nextAddress=UI.routeTable[destAddress]  
  7. #check whether the address is in the routeTable  
  8. #UI.addline('try')  
  9. except:  
  10. #UI.addline('ex1')  
  11. self.UI=UI  
  12. self.sourceAddress=UI.address  
  13. self.destAddress=destAddress  
  14. self.tool=tool()  
  15. #UI.addline(destAddress)  
  16. #UI.addline('ex2')  
  17. self.nextAddress=self.findNextAddress()  
  18. #if the address is not in the routeTable, recalculate the route.  
  19. #UI.addline(self.nextAddress)  
  20. #UI.addline('ex3')  
  21. def getNextAddress(self):  
  22. return self.nextAddress  
  23. #find the next address from the source to the destination  
  24. def findNextAddress(self):  
  25. a=-1 
  26. tempNextAddress='' 
  27. for item in self.UI.routeInfo:  
  28. #self.UI.addline(item+" //// ITEM")  
  29. alreadyPass=[]  
  30. result=item.split('*')  
  31. self.tool.addItemInList(alreadyPass,result[0])  
  32. if self.sourceAddress==result[0]:  
  33. if result[1]==self.destAddress:  
  34. b=int(result[2])  
  35. if b<a or a==-1:  
  36. a=b  
  37. tempNextAddress=result[1]  
  38. else:  
  39. b=self.getLeastCost(alreadyPass,result[1],self.destAddress)  
  40. c=b+int(result[2])  
  41. if b != -1:  
  42. if a==-1:  
  43. a=c  
  44. tempNextAddress=result[1]  
  45. else:  
  46. if c<a:  
  47. a=c  
  48. tempNextAddress=result[1]  
  49. return tempNextAddress  
  50. #get to the most appropriate path  
  51. def getLeastCost(self,alreadyPass,sourceAddress,destAddress):  
  52. a=-159 judge=self.tool.search(alreadyPass,sourceAddress)  
  53. if judge==False:  
  54. self.tool.addItemInList(alreadyPass,sourceAddress)  
  55. for item in self.UI.routeInfo:  
  56. result=item.split('*')  
  57. if sourceAddress==result[0]:  
  58. judgement=self.tool.search(alreadyPass,result[1])  
  59. if judgement==False:  
  60. if result[1]==destAddress:  
  61. b=int(result[2])  
  62. if b<a or a==-1:  
  63. a=b  
  64. else:  
  65. b=self.getLeastCost(alreadyPass,result[1],destAddress)  
  66. c=b+int(result[2])  
  67. if b!=-1:  
  68. if a==-1 or c<a:  
  69. a=c  
  70. return a 

OK 現在來說說如果路徑信息變了要怎么樣。

路徑信息變了,簡單一句話,把整個路由表刪了,重新計算,這就是所謂的更新路由表。

因為一旦更新路徑,計算機不可能直接就看出來哪更新了,算哪個點就行了,他還是一樣要所有的都看一遍,既然看了,和重新計算已無任何區別,那就直接把所有的刪了就行了。 用路由表的時候,要去哪個終點了,算哪個,算完存起來,下次用直接跳存儲的信息就行,不用就不管,扔那,這樣如果一次還沒有全部目的地傳輸一遍的時候,更新路徑信息了,那些沒用過的壓根就沒計算過,也不需要計算,可以節省一部分計算機資源。

原文鏈接:http://www.cnblogs.com/kevinGuo/archive/2011/12/07/2278702.html

【編輯推薦】

  1. Java字符編碼根本原理
  2. Java中對象的等價性比較
  3. Java自定義異常類
  4. Java編程:數據的截尾與舍入
  5. Java版A星算法實現步驟
責任編輯:林師授 來源: 郭璐_Kevin的博客
相關推薦

2011-05-17 13:58:37

最短路徑

2013-04-23 09:31:52

SQL Server

2021-05-10 08:07:40

圖算法路徑頂點

2021-03-10 09:50:15

算法Dijkstra短路問題

2024-05-24 08:00:00

2015-07-16 14:25:56

SDN網絡感知服務

2021-08-26 17:36:42

Floyd算法數據結構

2011-06-01 09:27:00

OSPF路由路由器

2024-04-02 11:37:59

AGI網絡模型GAN

2015-12-07 17:07:36

SDN網絡流量

2021-09-08 10:32:29

微服務容器化Serverless

2013-01-09 15:41:30

數據中心網絡優化網絡應用

2011-05-17 14:29:29

Dijkstra

2011-05-17 14:11:06

Dijkstra

2014-03-26 09:04:42

算法Floyd最短算法

2011-04-11 16:32:28

路徑C++

2025-08-11 09:14:00

2011-04-02 15:36:47

OSPF

2020-04-22 11:19:07

貪心算法動態規劃

2012-11-19 10:59:31

路由器OSPF協議
點贊
收藏

51CTO技術棧公眾號

国产精品无码久久av| 午夜精品久久久内射近拍高清| 中文字幕乱码无码人妻系列蜜桃| av在线免费在线观看| 你懂的在线视频| 国产精品久久久免费| 一区二区欧美日韩视频| 91丝袜超薄交口足| 678在线观看视频| 日本一区二区三区高清不卡| 91福利视频导航| 国产精品免费精品一区| 亚洲精品网址| 国产亚洲精品久久久久久| 欧美69精品久久久久久不卡| 日韩欧美一中文字暮专区| 国产精品国产自产拍高清av| 狠狠色噜噜狠狠狠狠色吗综合| 中文字幕+乱码+中文字幕明步 | 蜜桃视频日韩| 国产三级三级在线观看| 天堂一区二区在线| 午夜精品福利视频| 在线观看亚洲网站| 精品日韩一区| 日韩高清有码在线| 亚洲天堂av一区二区| 欧美大胆成人| 亚洲成人高清在线| 米仓穗香在线观看| 欧美成人三区| 欧美国产日韩精品免费观看| 国产日韩精品久久| 亚洲春色一区二区三区| 精品制服美女久久| 国产精品日韩一区| 国产大片中文字幕| 国产精品mv在线观看| 日韩中文在线中文网在线观看| 精品人妻互换一区二区三区| 国产精品一区二区三区美女| 日韩精品一区二区三区四区视频 | 欧美一级大片免费看| 日韩大片b站免费观看直播| 国产成人av电影| 2019国产精品视频| 国产精品视频一区二区三区,| 日韩在线一区二区三区| 国产999在线观看| 欧美三级午夜理伦| 中国女人久久久| 久久人人爽人人爽人人片av高请| 中文字幕av久久爽av| 97久久视频| 久久天天躁狠狠躁夜夜av| 超碰人人人人人人人| 欧美手机视频| 中文字幕在线视频日韩| 欧美日韩中文字幕视频| 日韩精品电影| 最新日韩中文字幕| 日韩精品久久久久久久的张开腿让| 日本不卡二三区| 日韩中文理论片| 色哟哟一一国产精品| 在线观看国产精品入口| 欧美肥老妇视频| 欧美成人精品欧美一级乱黄| 一区二区三区高清视频在线观看| 欧美亚洲另类制服自拍| 成人毛片一区二区三区| 久久国产精品无码网站| 国产日韩精品入口| 午夜精品久久久久久久99热黄桃 | 精品国产精品国产精品| 在线精品视频在线观看高清| 久久99热这里只有精品国产 | 在线观看国产日韩| 国产原创精品在线| 日本成人精品| 亚洲国产精品久久久| 丰满少妇在线观看资源站| 国产在视频线精品视频www666| 伊人av综合网| 久久艹精品视频| 亚洲影院免费| 成人精品在线视频| 日韩在线视频免费| 国产精品三级av| 91.com在线| 日本.亚洲电影| 91精品国产综合久久婷婷香蕉 | 欧美黄网站在线观看| 国产亚洲精彩久久| 欧美精品一区二区在线观看| 在线国产视频一区| 午夜精品国产| 国产成人av网址| av中文字幕免费在线观看| 97se亚洲国产综合自在线观| 亚洲资源视频| 久久青草伊人| 欧美日韩成人综合天天影院| 日本50路肥熟bbw| 91欧美在线| 欧美在线一级视频| 精品国产九九九| 亚洲国产精品黑人久久久| 国产精品久久久久久久久电影网| 黄瓜视频成人app免费| 日韩欧美国产高清| 蜜桃av免费观看| 国产伦理一区| 国产精品有限公司| 免费av在线网站| 91久久国产综合久久| 野战少妇38p| 亚洲综合激情在线| 国产精品永久免费在线| 深夜福利视频在线观看| 一区二区久久久久久| 亚洲高清免费在线观看| 人妖一区二区三区| 久久久久亚洲精品| 国产精品老熟女视频一区二区| 91麻豆精东视频| 日韩在线综合网| 亚洲成人五区| 欧美黑人巨大xxx极品| 国产又大又长又粗| 国产精品女主播av| 久久久久久三级| 综合国产视频| 欧美伊久线香蕉线新在线| 欧美综合视频在线| 一区二区三区精品在线观看| 午夜激情影院在线观看| 久久中文亚洲字幕| 国产伦精品一区二区三区精品视频| 日韩欧美亚洲系列| 日韩人体视频一二区| 久久国产精品无码一级毛片| 亚洲黄色高清| 国产日韩精品一区观看| 波多野结衣在线播放| 日韩丝袜情趣美女图片| 久久国产美女视频| 国产曰批免费观看久久久| 在线一区亚洲| 国产精品成人**免费视频| 日韩中文字幕网| 国产精品视频久久久久久| 中文字幕一区二区三区在线观看| 五月天激情视频在线观看| 精品理论电影| 国产久一一精品| 国产日产一区二区三区| 欧美一区二区三区在线观看| 黄色一级视频在线观看| 成人午夜av电影| 国产99久久九九精品无码| 米奇777超碰欧美日韩亚洲| 欧日韩在线观看| 亚洲麻豆精品| 欧美一区二区成人| 国产午夜福利精品| 久久伊99综合婷婷久久伊| 欧美视频免费播放| 成人羞羞动漫| 亚洲综合视频1区| 97久久人人超碰caoprom| 精品亚洲一区二区三区在线观看| 国产精品va无码一区二区三区| 久久精品视频免费| 永久免费的av网站| 极品日韩av| 欧美一区1区三区3区公司| 久久国产三级| 欧美激情视频在线| 国产小视频在线| 欧美年轻男男videosbes| 黄色一级视频免费| 国产亚洲精品福利| 亚洲国产欧美日韩在线| 亚洲一区二区三区高清不卡| 婷婷亚洲婷婷综合色香五月| 日韩成人视屏| 日韩免费在线免费观看| 国产网站在线免费观看| 日韩av在线免费看| 一本到在线视频| 亚洲国产毛片aaaaa无费看| 国产全是老熟女太爽了| 国产自产高清不卡| 日韩网址在线观看| 欧美影院一区| 日韩成人av电影在线| 亚洲日本视频在线| 国产精品日韩在线播放| 999福利在线视频| 三级精品视频久久久久| 日韩一区二区三区不卡| 在线不卡免费av| 99久久久久久久久| 午夜精品久久久久久久蜜桃app| 欧美熟妇激情一区二区三区| 国产99久久久国产精品潘金| 99视频在线视频| 国产日韩免费| 青青草免费在线视频观看| 精品免费在线| 狼狼综合久久久久综合网| 亚洲国产视频二区| 国产欧美中文字幕| av在线日韩| 午夜精品国产| 亚洲www在线观看| 日韩三区在线| 亚洲 日韩 国产第一| 黄色免费在线看| 一区国产精品视频| 色视频免费在线观看| 精品少妇一区二区三区在线播放| 亚洲一区二区天堂| 91久久香蕉国产日韩欧美9色| 国产一级av毛片| 亚洲女同女同女同女同女同69| 欧美人与性囗牲恔配| 2023国产一二三区日本精品2022| 在线观看一区二区三区视频| 久久97超碰国产精品超碰| www日韩视频| 美女精品在线| 国产l精品国产亚洲区久久| 日韩午夜免费| 91免费黄视频| 亚洲国产一区二区精品专区| 又大又硬又爽免费视频| 欧美.www| 国产成人一二三区| 欧美日本不卡高清| a级片一区二区| 欧美淫片网站| 日韩一二区视频| 欧美国产激情| 人妻互换免费中文字幕| 欧美日韩国产一区精品一区| 亚洲一区 在线播放| 欧美三区不卡| 日本手机在线视频| 亚洲少妇一区| 黄色片视频在线免费观看| 国产精品久久久久毛片大屁完整版| 美女日批免费视频| 亚洲一区二区网站| 日本xxxxxxx免费视频| 日日夜夜精品视频免费| 国产免费又粗又猛又爽| 精品一区二区日韩| 日韩精品――色哟哟| 成人免费毛片高清视频| 中文在线观看免费视频| 久久先锋影音av鲁色资源网| 精品无码人妻一区| 日本一区二区成人| 欧洲猛交xxxx乱大交3| 午夜视频一区二区| 91丝袜一区二区三区| 欧美天堂亚洲电影院在线播放| 污污视频网站在线| 91电影在线播放| 日韩国产中文字幕| 成人在线视频成人| 俺去亚洲欧洲欧美日韩| 日本三级在线观看网站| 91国偷自产一区二区三区的观看方式| 亚洲国产福利| 成人妇女免费播放久久久| 亚洲一区二区三区中文字幕在线观看 | 欧美极品日韩| 国产韩日影视精品| 国产精品久久国产| 日韩精品电影一区亚洲| 午夜精品久久久久久久99热影院| 国产盗摄视频一区二区三区| a视频免费观看| 亚洲欧洲日本在线| 国产成人自拍视频在线| 欧美丝袜自拍制服另类| 成人激情四射网| 一区二区三区在线播放欧美| 天天色天天射天天综合网| 国产99久久精品一区二区永久免费| 欧美日韩破处视频| 狠狠色综合网站久久久久久久| 波多野结衣一区| 亚洲人成无码网站久久99热国产| 日本欧美一区二区三区| 国产xxx在线观看| 日本一区二区三区免费乱视频| 久久国产在线观看| 欧美三级电影网| 三级理论午夜在线观看| 草民午夜欧美限制a级福利片| 日本黄色免费在线| 97在线电影| 日韩伦理一区| 777久久久精品一区二区三区 | 51调教丨国产调教视频| 亚洲色图视频网站| 夜夜爽妓女8888视频免费观看 | 国产69精品久久app免费版| 九九热最新视频//这里只有精品| 午夜欧美巨大性欧美巨大| 99九九电视剧免费观看| 99久久www免费| 国产激情在线观看视频| 成人av资源在线| 日韩女优一区二区| 欧美丝袜自拍制服另类| 猫咪在线永久网站| 69久久夜色精品国产69| 视频一区日韩精品| 一区二区三区四区视频在线观看| 亚洲欧美春色| 制服丝袜第一页在线观看| 亚洲男人天堂av网| 国产一区二区三区在线观看| 国产一区二区三区毛片| 桃子视频成人app| 欧美精品中文字幕一区二区| 中文精品视频| 在线免费观看a级片| 性做久久久久久久免费看| 亚洲av无码乱码国产麻豆| 亚洲私人影院在线观看| 视频一区二区三区在线观看| 亚洲精品一区二区妖精| 日本在线播放一区二区| 中文字幕在线观看一区| 中文字幕一区二区三区四区视频| 国产亚洲精品久久| 国产综合色在线观看| 日本不卡二区高清三区| 久久最新视频| 国产免费一区二区三区网站免费| 欧美日韩国产一中文字不卡| 天天干天天做天天操| 91国内免费在线视频| 外国成人在线视频| 日韩 欧美 高清| 欧美国产日韩精品免费观看| 中文字幕在线2019| 久久久999精品视频| 国产情侣一区在线| 国产又粗又猛又爽又黄的网站| 成人国产精品免费观看| 97久久久久久久| 亚洲欧洲视频在线| 日韩成人免费av| 特级西西444| av网站一区二区三区| 五月激情六月丁香| 最近2019中文字幕大全第二页| 日本一区二区三区中文字幕| 欧美少妇一级片| 成人免费高清视频| 丰满少妇xoxoxo视频| 中文字幕日韩高清| 成人综合日日夜夜| 久久亚洲中文字幕无码| 国产日韩欧美制服另类| 一区两区小视频| 欧美富婆性猛交| 色综合久久中文| 国模私拍视频在线观看| 亚洲自拍另类综合| 免费国产在线观看| 国产欧美一区二区三区在线| 欧美精品91| 亚洲黄色小说视频| 91麻豆精品国产无毒不卡在线观看 | 国产精品三级久久久久三级| 精品久久久中文字幕人妻| 97av在线播放| 97精品国产福利一区二区三区| 人妻激情偷乱频一区二区三区| 日本韩国欧美一区| 污污的网站在线看| 热re99久久精品国99热蜜月| 国产麻豆精品在线观看| 日本中文字幕在线| 久久精品国产亚洲| 一道本一区二区三区| 天天操精品视频| 色视频一区二区| 丰满诱人av在线播放| 亚洲视频在线一区观看| 亚洲欧美一二三区| 欧美国产一区二区三区|