dijkstra算法是什么?

Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。

其基本原理是:每次新扩展一个距离最短的点,更新与其相邻的点的距离。当所有边权都为正时,由于不会存在一个距离更短的没扩展过的点,所以这个点的距离永远不会再被改变,因而保证了算法的正确性。

不过根据这个原理,用Dijkstra求最短路的图不能有负权边,因为扩展到负权边的时候会产生更短的距离,有可能就破坏了已经更新的点距离不会改变的性质。

举例来说,如果图中的顶点表示城市,而边上的权重表示著城市间开车行经的距离。Dijkstra算法可以用来找到两个城市之间的最短路径。

Dijkstra算法的输入包含了一个有权重的有向图G,以及G中的一个来源顶点S。我们以V表示G中所有顶点的集合。每一个图中的边,都是两个顶点所形成的有序元素对。(u,v)表示从顶点u到v有路径相连。我们以E所有边的集合,而边的权重则由权重函数w: E→[0,∞]定义。

因此,w(u,v)就是从顶点u到顶点v的非负花费值(cost)。边的花费可以想像成两个顶点之间的距离。任两点间路径的花费值,就是该路径上所有边的花费值总和。

已知有V中有顶点s及t,Dijkstra算法可以找到s到t的最低花费路径(i.e.最短路径)。这个算法也可以在一个图中,找到从一个顶点s到任何其他顶点的最短路径。



  • dijkstra绠楁硶鏄粈涔?
    绛旓細Dijkstra鏄吀鍨嬫渶鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓涓妭鐐瑰埌鍏朵粬鑺傜偣鐨勬渶鐭矾寰銆傝绠楁硶浣跨敤鐨勬槸璐績绛栫暐锛氭瘡娆¢兘鎵惧嚭鍓╀綑椤剁偣涓笌婧愮偣璺濈鏈杩戠殑涓涓《鐐广傜粰瀹氫竴甯︽潈鍥撅紝鍥句腑姣忔潯杈圭殑鏉冨兼槸闈炶礋鐨勶紝浠h〃鐫涓ら《鐐逛箣闂寸殑璺濈銆傛寚瀹氬浘涓殑涓椤剁偣涓烘簮鐐癸紝鎵惧嚭婧愮偣鍒板叾瀹冮《鐐圭殑鏈鐭矾寰勫拰鍏堕暱搴︾殑闂锛屽嵆鏄崟婧愭渶...
  • dijkstra绠楁硶鏄粈涔?
    绛旓細Dijkstra绠楁硶鏄敱鑽峰叞璁$畻鏈虹瀛﹀鐙勫厠鏂壒鎷夛紙Dijkstra锛変簬1959骞存彁鍑虹殑锛屽洜姝ゅ張鍙媱鍏嬫柉鐗规媺绠楁硶銆鏄粠涓涓《鐐瑰埌鍏朵綑鍚勯《鐐圭殑鏈鐭矾寰勭畻娉锛岃В鍐崇殑鏄湁鍚戝浘涓渶鐭矾寰勯棶棰樸傚叾鍩烘湰鍘熺悊鏄細姣忔鏂版墿灞曚竴涓窛绂绘渶鐭殑鐐癸紝鏇存柊涓庡叾鐩搁偦鐨勭偣鐨勮窛绂汇傚綋鎵鏈夎竟鏉冮兘涓烘鏃讹紝鐢变簬涓嶄細瀛樺湪涓涓窛绂绘洿鐭殑娌℃墿灞...
  • dijkstra绠楁硶鏄粈涔?
    绛旓細杩澃鏂壒鎷夌畻娉曠敤鏉ヨВ鍐充粠椤剁偣v0鍑哄彂鍒板叾浣欓《鐐圭殑鏈鐭矾寰锛岃绠楁硶鎸夌収鏈鐭矾寰勯暱搴﹂掑鐨勯『搴忎骇鐢熸墍浠ユ渶鐭矾寰勩傚浜庡浘G=锛圴锛孍锛夛紝灏嗗浘涓殑椤剁偣鍒嗘垚涓ょ粍锛氱涓缁凷锛氬凡姹傚嚭鐨勬渶鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负锝泇0}锛夈傜浜岀粍V-S锛氬皻鏈眰鍑烘渶鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负V-{v0}鐨勫叏閮ㄧ粨鐐癸級銆傚爢浼樺寲 ...
  • Dijkstra绠楁硶
    绛旓細Dijkstra(杩澃鏂壒鎷)绠楁硶鏄吀鍨嬬殑鍗曟簮鏈鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓涓妭鐐瑰埌鍏朵粬鎵鏈夎妭鐐圭殑鏈鐭矾寰銆備富瑕佺壒鐐规槸浠ヨ捣濮嬬偣涓轰腑蹇冨悜澶栧眰灞傛墿灞曪紝鐩村埌鎵╁睍鍒扮粓鐐逛负姝傛敞鎰忚绠楁硶瑕佹眰鍥句腑涓嶅瓨鍦ㄨ礋鏉冭竟銆傝G=(V,E)鏄竴涓甫鏉冩湁鍚戝浘锛屾妸鍥句腑椤剁偣闆嗗悎V鍒嗘垚涓ょ粍锛岀涓缁勪负宸叉眰鍑烘渶鐭矾寰勭殑椤剁偣闆嗗悎锛堢敤S琛ㄧず...
  • Dijkstra 绠楁硶鏄粈涔?
    绛旓細绠楁硶灏嗘寜鏈鐭矾寰勯暱搴︾殑閫掑椤哄簭閫愪釜灏嗙浜岀粍鐨勯《鐐瑰姞鍏ュ埌绗竴缁勪腑锛岀洿鍒版墍鏈夐《鐐归兘琚姞鍏ュ埌绗竴缁勯《鐐归泦S涓烘銆傘愮畻娉曟濇兂銆慻涓虹敤閭绘帴鐭╅樀琛ㄧず鐨勫甫鏉冨浘銆傦紙1锛塖<-{v0};dist[i]=g.arcs[v0][v1].adj;(vi灞炰簬V-S)(灏唙0鍒板叾浣欓《鐐圭殑鏈鐭矾寰勯暱搴﹀垵濮嬪寲涓烘潈鍊)锛2锛夐夋嫨vk,浣垮緱锛歞ist[k...
  • 鍥鹃亶鍘嗙畻娉曚箣鏈鐭矾寰Dijkstra绠楁硶
    绛旓細Dijkstra绠楁硶锛岀炕璇戜綔鎴村厠鏂壒鎷夌畻娉曟垨杩澃鏂壒鎷夌畻娉锛屼簬1956骞寸敱鑽峰叞璁$畻鏈虹瀛﹀鑹惧吂璧皵.鎴村厠鏂壒鎷夋彁鍑猴紝鐢ㄤ簬瑙e喅璧嬫潈鏈夊悜鍥剧殑 鍗曟簮鏈鐭矾寰勯棶棰 銆傛墍璋撳崟婧愭渶鐭矾寰勯棶棰樻槸鎸囩‘瀹氳捣鐐癸紝瀵绘壘璇ヨ妭鐐瑰埌鍥句腑浠绘剰鑺傜偣鐨勬渶鐭矾寰勶紝绠楁硶鍙敤浜庡鎵句袱涓煄甯備腑鐨勬渶鐭矾寰勬垨鏄В鍐宠憲鍚嶇殑鏃呰鍟嗛棶棰樸傞棶棰樻弿杩 锛...
  • 杩澃鏂壒鎷夌畻娉鐨勪粙缁
    绛旓細杩澃鏂壒鎷夌畻娉曟槸鐢辫嵎鍏拌绠楁満绉戝瀹剁媱鍏嬫柉鐗规媺浜1959 骞存彁鍑虹殑锛屽洜姝ゅ張鍙媱鍏嬫柉鐗规媺绠楁硶銆鏄粠涓涓《鐐瑰埌鍏朵綑鍚勯《鐐圭殑鏈鐭矾寰勭畻娉锛岃В鍐崇殑鏄湁鍚戝浘涓渶鐭矾寰勯棶棰樸傝开鏉版柉鐗规媺绠楁硶涓昏鐗圭偣鏄互璧峰鐐逛负涓績鍚戝灞傚眰鎵╁睍锛岀洿鍒版墿灞曞埌缁堢偣涓烘銆
  • 鏈鐭矾寰dijkstra绠楁硶
    绛旓細Dijkstra杩澃鏂壒鎷夋槸涓绉嶅鐞嗗崟婧愮偣鐨鏈鐭矾寰勭畻娉,灏辨槸璇存眰浠庢煇涓涓妭鐐瑰埌鍏朵粬鎵鏈夎妭鐐圭殑鏈鐭矾寰勫氨鏄疍ijkstra銆傝祫鏂欐嫇灞曪細杩澃鏂壒鎷夌畻娉(Dijkstra)鏄敱鑽峰叞鏁拌厰璁$畻鏈虹瀛﹀鐙勫厠鏂壒鎷変簬1959骞存彁鍑虹殑锛屽洜姝ゅ張鍙媱鍏嬫柉鐗规媺绠楁硶銆傛槸浠庝竴涓《鐐瑰埌鍏惰柉绾宠~浣欏悇椤剁偣鐨勬渶鐭矾寰勭畻娉曪紝瑙e喅鐨勬槸鏈夋潈鍥句腑鏈鐭...
  • dijkstra绠楁硶鏈夊摢浜?
    绛旓細杩澃鏂壒鎷夌畻娉鐢ㄦ潵瑙e喅浠庨《鐐箆0鍑哄彂鍒板叾浣欓《鐐圭殑鏈鐭矾寰勶紝璇ョ畻娉曟寜鐓ф渶鐭矾寰勯暱搴﹂掑鐨勯『搴忎骇鐢熸墍浠ユ渶鐭矾寰勩傚浜庡浘G=锛圴锛孍锛夛紝灏嗗浘涓殑椤剁偣鍒嗘垚涓ょ粍锛氱涓缁凷锛氬凡姹傚嚭鐨勬渶鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负{v0}锛夈傜浜岀粍V-S锛氬皻鏈眰鍑烘渶鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负V-{v0}鐨勫叏閮ㄧ粨鐐癸級銆傜畻娉曞皢鎸...
  • dijkstra绠楁硶鏄粈涔?
    绛旓細锛燂紒锛侊級锛屼絾鏄绠楁硶鏈缁堢‘瀹炲緱鍒颁簡浠庡師鐐瑰埌鍥句腑鍏朵綑鍚勭偣鐨勬渶鐭矾寰勶紝鍙互璇磋繖鏄釜鍓骇鍝侊紝瀵逛簬绠楁硶鐨勭粓缁撴潯浠朵篃搴旇浠ユ眰寰椾簡鍘熺偣鍒板浘涓叾浣欏悇鐐圭殑鏈鐭矾寰勪负瀹溿傛竻妤氫簡绠楁硶鐨勮繖绉嶅阀濡欐瀯鎬濆悗锛岀悊瑙g畻娉曟湰韬氨涓嶆槸闅鹃浜嗐傜畻娉曟妸涓涓浘锛圙锛変腑鐨勭偣鍒掑垎鎴愪簡鑻ュ共閮ㄥ垎锛1锛夛細鍘熺偣锛坴锛夛紱2锛夛細鎵鏈夊懆杈...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网