#定義MaxNum 765432100
使用命名空間std
ifstream fin(" Dijkstra . in ");
of stream fout(" Dijkstra . out ");
int映射;
a(3,:)=;
a(5,)=;
a(6,)=零(1,6);
a = a+a’;
pb(1:長度(a))= 0;Pb(I)= 1;index 1 = 1;index2=ones(1,長度(a));
d(1:長度(a))= M;d(I)= 0;temp = 1;
while sum(Pb)& lt;長度(a)
TB = find(Pb = = 0);
d(tb)=min(d(tb),d(temp)+a(temp,TB));
tmpb = find(d(TB)= = min(d(TB));
temp = TB(tmpb(I));
Pb(temp)= 1;
index1=[index1,temp];
index = index 1(find(d(index 1)= = d(temp)-a(temp,index 1));
如果長度(索引)>=2
index =索引(1);
結束
index 2(temp)=索引;
結束
d,索引1,索引2
Matlab編程
function [s,d]=minroute(i,m,w,opt)
dijkstra算法在%圖和網絡理論中求最短路徑的m函數
% format [s,d]=minroute(i,m,w,opt)
如果nargin & lt4,opt = 0;結束
DD =[];TT =[];ss =[];ss(1,1)= I;v = 1:m;v(I)=[];
DD =[0;I];kk = 2;[mdd,ndd]=大小(DD);
while~isempty(v)
[tmpd,j]=min(w(i,v));tmpj = v(j);
對於k=2:ndd
[tmp2,jj]=min(dd(1,k)+w(dd(2,k),v));
tmp 2 = v(jj);tt(k-1,:)=[tmp1,tmp2,jj];
結束;
tmp=[tmpd,tmpj,j;TT];[tmp3,tmp 4]= min(tmp(;,1));
如果tmp3==tmpd
ss(1:2,kk)=[I;tmp(tmp4,2)];
else,tmp5=find(ss(:,tmp 4)~ = 0);tmp6 =長度(tmp 5);
如果dd(2,tmp4)=ss(tmp6,tmp4)
ss(1:tmp6+1,kk)=[ss(tmp5,tmp 4);tmp(tmp4,2)];
else,ss(1:3,kk)=[I;dd(2,tmp 4);tmp(tmp4,2)];
結束;結束
dd=[dd,[tmp3,tmp(tmp4,2)];v(tmp(tmp4,3))=[];
[mdd,ndd]=大小(DD);kk = kk+1;
結束;
如果opt==1
[tmp,t]=sort(dd(2,);s = ss(:t);d=dd(1,t);
否則,s = ssd=dd(1,);
結束