當前位置:編程學習大全網 - 編程語言 - 實現dijkstra算法的優先級隊列的C++代碼

實現dijkstra算法的優先級隊列的C++代碼

# include & ltfstream & gt

#定義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,);

結束

  • 上一篇:Windows NT 4.0的安全性
  • 下一篇:初中物理的16個研究方法!!!
  • copyright 2024編程學習大全網