用dijkstra算法计算源点到个结点的最短路径....谢谢亲爱的朋友~ 详细答案 利用Dijkstra算法求下图中从顶点1到其它各顶点间的最短...

\u7528Dijkstra\u7b97\u6cd5\u6c42\u6700\u77ed\u8def\u5f84\u7684MATLAB\u7a0b\u5e8f

\u4f60\u5bf9\u56fe\u8bba\u7684\u77e5\u8bc6\u6709\u4e86\u89e3\u5427~W\u662f\u5173\u8054\u77e9\u9635\uff0cs\u548ct\u5206\u522b\u662f\u8d77\u59cb\u70b9\u548c\u7ec8\u6b62\u8282\u70b9\u7684\u5e8f\u53f7\u3002\u8fd4\u56de\u7684d\u4e3a\u6700\u77ed\u7684\u52a0\u6743\u8def\u5f84\u957f\u5ea6,p\u4e3a\u6700\u4f18\u8def\u5f84\u8282\u70b9\u7684\u5e8f\u53f7\u5411\u91cf\u3002\u6ce8\u610f\uff0c\u8fd9\u91ccW\u77e9\u9635\u4e3a0\u7684\u70b9\u6743\u503c\u5df2\u7ecf\u81ea\u52a8\u8bbe\u4e3a\u65e0\u7a77\u5927\u4e86\u3002\u8bf7\u53c2\u8003\u300a\u9ad8\u7b49\u5e94\u7528\u6570\u5b66\u95ee\u9898\u7684 MATLAB\u4e00\u4e66\u300b\u3002\u6211\u5427\u7a0b\u5e8f\u8d4b\u7ed9\u4f60\u3002
\u4f60\u505a\u4e00\u4e2aM\u51fd\u6570\u7528\u5427\u3002
function [d,path]=dijkstra(W,s,t)
[n,m]=size(W);ix=(W==0);W(ix)=inf;
if n~=m,error('Square W required');end
visited(1:n)=0; dist(1:n)=inf;parent(1:n)=0;dist(s)=0;d=inf;
for i=1:(n-1),%\u6c42\u51fa\u6bcf\u4e2a\u8282\u70b9\u4e0e\u8d77\u59cb\u70b9\u7684\u5173\u7cfb
ix=(visited==0);vec(1:n)=inf;vec(ix)=dist(ix);
[a,u]=min(vec);visited(u)=1;
for v=1:n,if (W(u,v)+dist(u)<dist(v)),
dist(v)=dist(u)+W(u,v);parent(v)=u;
end;end;end
if parent(t)~=0,path=t;d=dist(t);%\u56de\u6eaf\u6700\u77ed\u8def\u5f84
while t~=s,p=parent(t);path=[p path];t=p;end;
end;
\u5e0c\u671b\u5bf9\u4f60\u6709\u7528
\u662f\u5426\u53ef\u4ee5\u89e3\u51b3\u60a8\u7684\u95ee\u9898\uff1f

v1\u5230v2\uff1a10\u4e3a\u6700\u77ed\u8def\u5f84\uff1b
v1\u5230v3\uff1a7\u4e3a\u6700\u77ed\u8def\u5f84\uff1b
v1\u5230v4\uff1a8\u4e3a\u6700\u77ed\u8def\u5f84\uff1b
v1\u5230v5\uff1av1-> v2 -> v5 =10+6= 16\uff1bv1v3v5=7+9=16;v1v4v6v5=8+5+2=15; 15\u4e3a\u6700\u77ed\u8def\u5f84\uff1b
v1\u5230v6\uff1av1v2v3v6=10+2+9=21\uff1bv1v3v6=7+9=16\uff1bv1v4v6=8+5=13\uff1b13\u4e3a\u6700\u77ed\u8def\u5f84\uff1b
v1\u5230v7\uff1av1v2v5v7=10+6+20=36\uff1bv1v3v5v7=7+9+20=36\uff1bv1v3v6v7=7+9+30=46\uff1b
v1v4v6v7=8+5+30=42\uff1bv1v4v6v5v7=35\uff1b35\u4e3a\u6700\u77ed\u8def\u5f84

Dijkstra\uff1a
\u6c42\u5355\u6e90\u3001\u65e0\u8d1f\u6743\u7684\u6700\u77ed\u8def\u3002\u65f6\u6548\u6027\u8f83\u597d\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3aO\uff08V*V+E\uff09\u3002\u6e90\u70b9\u53ef\u8fbe\u7684\u8bdd\uff0cO\uff08V*lgV+E*lgV\uff09=>O\uff08E*lgV\uff09\u3002\u5f53\u662f\u7a00\u758f\u56fe\u7684\u60c5\u51b5\u65f6\uff0c\u6b64\u65f6E=V*V/lgV\uff0c\u6240\u4ee5\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u53ef\u4e3aO\uff08V^2\uff09\u3002\u82e5\u662f\u6590\u6ce2\u90a3\u5951\u5806\u4f5c\u4f18\u5148\u961f\u5217\u7684\u8bdd\uff0c\u7b97\u6cd5\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u5219\u4e3aO\uff08V*lgV + E\uff09\u3002
\u4ee5\u4e0a\u5185\u5bb9\u53c2\u8003\uff1a\u767e\u5ea6\u767e\u79d1-\u6700\u77ed\u8def\u5f84\u7b97\u6cd5

(这里描述的是从节点1开始到各点的dijkstra算法,其中Wa->b表示a->b的边的权值,d(i)即为最短路径值)
1. 置集合S={2,3,...n}, 数组d(1)=0, d(i)=W1->i(1,i之间存在边) or +无穷大(1.i之间不存在边) 2. 在S中,令d(j)=min{d(i),i属于S},令S=S-{j},若S为空集则算法结束,否则转3
3. 对全部i属于S,如果存在边j->i,那么置d(i)=min{d(i), d(j)+Wj->i},转2

迪杰斯特拉算法的基本思路:大致是说从一个给定的起点开始,遍历到其他结点,并且到该结点的距离要是最短。http://wenku.baidu.com/view/bef364c24028915f804dc2cf.html 参考下这个网址吧~ 看了就明白了…… 如果那个文档看不懂的话。 看这个吧~ 解释得很清楚,也有图解http://wenku.baidu.com/view/3dabd1d97f1922791688e8b4.html

Dijkstra算法的具体步骤:
Dijkstra算法又称为单源最短路径,所谓单源是在一个有向图中,从一个顶点出发,求该顶点至所有可到达顶点的最短路径问题。
设G=(V,E)是一个有向图,V表示顶点,E表示边。它的每一条边(i,j)属于E,都有一个非负权W(I,j),在G中指定一个结点v0,要求把从v0到G的每一个接vj(vj属于V)的最短有向路径找出来(或者指出不存在)。
基本思想是:设置一个顶点的集合s,并不断地扩充这个集合,一个顶点属于集合s当且仅当从源点到该点的路径已求出。开始时s中仅有源点,并且调整非s中点的最短路径长度,找当前最短路径点,将其加入到集合s,直到终点在s中。
基本步骤:
1、把所有结点分成两组:
第一组:包括已经确定最短路径的结点;
第二组:包括尚未确定最短路径的结点。
2、开始时,第一组只包含起点,第二组包含剩余的点;
3、用贪心的策略,按最短路径长度递增的顺序把第二组的结点加到第一组去,直到v0可达的所有结点都包含于第一组中。在这个过程中,不断更新最短路径,总保持从v0到第一组各结点的最短路径长度dist都不大于从v0到第二组任何结点的路径长度。
4、每个结点对应一个距离值,第一组结点对应的距离就是v0到此结点的最短路径长度,第二组结点对应的距离值就是v0由第一组结点到此结点的最短路径长度。
5、直到所有的顶点都扫描完毕(v0可达的所有结点都包含于第一组中),找到v0到其它各点的所有最短路径。

  • 鐩磋鐞嗚В:鍗婧愮偣鏈鐭矾寰勨斺Dijkstra绠楁硶
    绛旓細Dijkstra绠楁硶鐨勪富瑕佺壒鐐规槸浠庤捣婧愮偣寮濮嬶紝閲囩敤璐績绠楁硶鐨勭瓥鐣ワ紝姣忔閬嶅巻鍒板鐐硅窛绂绘渶杩戜笖鏈闂繃鐨勯《鐐圭殑閭绘帴椤剁偣锛岀洿鍒版墿灞曞埌缁堢偣涓烘銆   Dijkstra绠楁硶閫氳繃缁存姢涓や釜闆嗗悎锛 (宸叉眰鍑烘渶鐭矾寰勭殑椤剁偣)鍜 锛堟湭姹傚嚭鏈鐭矾寰勭殑椤剁偣锛夛紝姣忔杩唬鍦颁粠 涓Щ闄よ矾寰勮窛绂绘渶灏忕殑鐐瑰埌闆嗗悎 涓...
  • dijkstra绠楁硶鏄粈涔?
    绛旓細Dijkstra鏄吀鍨嬫渶鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓涓妭鐐瑰埌鍏朵粬鑺傜偣鐨勬渶鐭矾寰銆傝绠楁硶浣跨敤鐨勬槸璐績绛栫暐锛氭瘡娆¢兘鎵惧嚭鍓╀綑椤剁偣涓笌婧愮偣璺濈鏈杩戠殑涓涓《鐐广傜粰瀹氫竴甯︽潈鍥撅紝鍥句腑姣忔潯杈圭殑鏉冨兼槸闈炶礋鐨勶紝浠h〃鐫涓ら《鐐逛箣闂寸殑璺濈銆傛寚瀹氬浘涓殑涓椤剁偣涓烘簮鐐癸紝鎵惧嚭婧愮偣鍒板叾瀹冮《鐐圭殑鏈鐭矾寰勫拰鍏堕暱搴︾殑闂锛屽嵆鏄崟婧愭渶...
  • 鏈鐭矾寰dijkstra绠楁硶
    绛旓細鏈鐭矾寰刣ijkstra绠楁硶濡備笅锛欴ijkstra杩澃鏂壒鎷夋槸涓绉嶅鐞嗗崟婧愮偣鐨勬渶鐭矾寰勭畻娉,灏辨槸璇存眰浠庢煇涓涓妭鐐瑰埌鍏朵粬鎵鏈夎妭鐐圭殑鏈鐭矾寰勫氨鏄疍ijkstra銆傝祫鏂欐嫇灞曪細杩澃鏂壒鎷夌畻娉(Dijkstra)鏄敱鑽峰叞鏁拌厰璁$畻鏈虹瀛﹀鐙勫厠鏂壒鎷変簬1959骞存彁鍑虹殑锛屽洜姝ゅ張鍙媱鍏嬫柉鐗规媺绠楁硶銆傛槸浠庝竴涓《鐐瑰埌鍏惰柉绾宠~浣欏悇椤剁偣鐨勬渶鐭矾寰勭畻娉...
  • 鐢╠ijkstra绠楁硶璁$畻婧愮偣鍒颁釜缁撶偣鐨勬渶鐭矾寰...璋㈣阿浜茬埍鐨勬湅鍙媬 璇︾粏...
    绛旓細1銆佹妸鎵鏈夌粨鐐瑰垎鎴愪袱缁勶細绗竴缁勶細鍖呮嫭宸茬粡纭畾鏈鐭矾寰勭殑缁撶偣锛涚浜岀粍锛氬寘鎷皻鏈‘瀹氭渶鐭矾寰勭殑缁撶偣銆2銆佸紑濮嬫椂锛岀涓缁勫彧鍖呭惈璧风偣锛岀浜岀粍鍖呭惈鍓╀綑鐨勭偣锛3銆佺敤璐績鐨勭瓥鐣ワ紝鎸夋渶鐭矾寰勯暱搴﹂掑鐨勯『搴忔妸绗簩缁勭殑缁撶偣鍔犲埌绗竴缁勫幓锛岀洿鍒皏0鍙揪鐨勬墍鏈夌粨鐐归兘鍖呭惈浜庣涓缁勪腑銆傚湪杩欎釜杩囩▼涓紝涓嶆柇鏇存柊...
  • Dijkstra绠楁硶
    绛旓細Dijkstra(杩澃鏂壒鎷)绠楁硶鏄吀鍨嬬殑鍗曟簮鏈鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓涓妭鐐瑰埌鍏朵粬鎵鏈夎妭鐐圭殑鏈鐭矾寰銆備富瑕佺壒鐐规槸浠ヨ捣濮嬬偣涓轰腑蹇冨悜澶栧眰灞傛墿灞曪紝鐩村埌鎵╁睍鍒扮粓鐐逛负姝傛敞鎰忚绠楁硶瑕佹眰鍥句腑涓嶅瓨鍦ㄨ礋鏉冭竟銆傝G=(V,E)鏄竴涓甫鏉冩湁鍚戝浘锛屾妸鍥句腑椤剁偣闆嗗悎V鍒嗘垚涓ょ粍锛岀涓缁勪负宸叉眰鍑烘渶鐭矾寰勭殑椤剁偣闆嗗悎锛堢敤S琛ㄧず...
  • Dijkstra绠楁硶姹鍗曟簮鏈鐭矾
    绛旓細dijkstra绠楁硶鐢ㄤ簬姹傝В鍗曟簮鏈鐭矾闂锛屽彧鑳芥眰瑙f鏉冨浘锛屽浘涓湁璐熻竟姹傚嚭鏉ョ殑缁撴灉浼氭湁闂銆傜畻娉曠殑鎬濇兂灏辨槸鍏堢‘瀹氫竴涓捣鐐癸紙婧愮偣锛夛紝鐒跺悗瀵绘壘杩欎釜鐐瑰埌鍏朵粬鎵鏈夌偣鐨勮窛绂绘渶灏忓硷紝鎵惧埌涓鏉¤窛绂绘渶鐭殑绾胯矾銆傜涓娆℃煡璇㈣繖鏉¤矾寰勪竴瀹氭槸鍙湁杩欎袱涓偣鐨勶紝纭畾浜嗚繖涓偣锛屽氨鏍囪涓涓嬶紝璇存槑杩欎釜宸茬粡鏄渶鐭殑浜嗭紝鎺...
  • dijkstra绠楁硶鏄粈涔?
    绛旓細Dijkstra绠楁硶鏄敱鑽峰叞璁$畻鏈虹瀛﹀鐙勫厠鏂壒鎷夛紙Dijkstra锛変簬1959骞存彁鍑虹殑锛屽洜姝ゅ張鍙媱鍏嬫柉鐗规媺绠楁硶銆傛槸浠庝竴涓《鐐瑰埌鍏朵綑鍚勯《鐐圭殑鏈鐭矾寰勭畻娉曪紝瑙e喅鐨勬槸鏈夊悜鍥句腑鏈鐭矾寰勯棶棰樸傚叾鍩烘湰鍘熺悊鏄細姣忔鏂版墿灞曚竴涓窛绂绘渶鐭殑鐐癸紝鏇存柊涓庡叾鐩搁偦鐨勭偣鐨勮窛绂汇傚綋鎵鏈夎竟鏉冮兘涓烘鏃讹紝鐢变簬涓嶄細瀛樺湪涓涓窛绂绘洿鐭殑娌℃墿...
  • dijkstra绠楁硶鏈夊摢浜?
    绛旓細瀵逛簬鍥綠=锛圴锛孍锛夛紝灏嗗浘涓殑椤剁偣鍒嗘垚涓ょ粍锛氱涓缁凷锛氬凡姹鍑虹殑鏈鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负{v0}锛夈傜浜岀粍V-S锛氬皻鏈眰鍑烘渶鐭矾寰勭殑缁堢偣闆嗗悎锛堝紑濮嬩负V-{v0}鐨勫叏閮ㄧ粨鐐癸級銆绠楁硶灏嗘寜鏈鐭矾寰勯暱搴︾殑閫掑椤哄簭閫愪釜灏嗙浜岀粍鐨勯《鐐瑰姞鍏ュ埌绗竴缁勪腑锛岀洿鍒版墍鏈夐《鐐归兘琚姞鍏ュ埌绗竴缁勯《鐐归泦S涓烘銆
  • 杩澃鏂壒鎷夌畻娉
    绛旓細Dijkstra绠楁硶锛杩澃鏂壒鎷夌畻娉锛夋槸寰堟湁浠h〃鎬х殑鏈鐭矾寰勭畻娉曪紝鐢ㄤ簬璁$畻涓涓粨鐐瑰埌鍏朵粬缁撶偣鐨勬渶鐭矾寰勩傝绠楁硶鎸囧畾涓涓偣锛婧愮偣锛夊埌鍏朵綑鍚勪釜缁撶偣鐨勬渶鐭矾寰勶紝鍥犳涔熷彨鍋氬崟婧愭渶鐭矾寰勭畻娉曘傝绠楁硶鏄敱鑽峰叞璁$畻鏈虹瀛﹀Edsger W.Dijkstra浜1959骞村彂琛ㄣ侱ijkstra绠楁硶鏄竴绉嶇敤浜庤绠楀甫鏉冩湁鍚戝浘涓崟婧愭渶鐭矾寰...
  • 瑙i噴涓涓dijkstra绠楁硶杩欎釜璁$畻杩囩▼鐨勬剰鎬 鎬庝箞绠楃殑
    绛旓細Dijkstra绠楁硶涓昏瑙e喅鎸囧畾鏌愮偣(婧愮偣)鍒板叾浠栭《鐐圭殑鏈鐭矾寰勯棶棰樸傚熀鏈濇兂锛氭瘡娆℃壘鍒扮婧愮偣鏈杩戠殑椤剁偣锛岀劧鍚庝互璇ラ《鐐逛负涓績(杩囨浮椤剁偣)锛屾渶缁堟壘鍒版簮鐐瑰埌鍏朵綑椤剁偣鐨勬渶鐭矾銆倀=1锛氫护婧愮偣(v_0)鐨勬爣鍙蜂负姘镐箙鏍囧彿(0,位)(鍙充笂瑙掑姞鐐), 鍏朵粬涓轰复鏃(+鏃犵┓,位). 灏辨槸璇磛_0鍒皏_0鐨勮窛绂绘槸0锛屽叾浠栭《鐐瑰埌...
  • 扩展阅读:dijkstra算法详细步骤 ... dijkstra算法表格怎么画 ... dijkstra经典例题及答案 ... dijkstra标号法步骤 ... dijkstra最短路径画图 ... dijkstra算法遇到相同长度 ... 大二dijkstra算法例题 ... dijkstra计算公式 ... dijkstra算法计算时间程序 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网