參考博客鏈接:https://www.cnblogs.com/kex1n/p/4178782.html
Dijkstra是常用的全局路徑規划算法,其本質上是一個最短路徑尋優算法。算法的詳細介紹參考上述鏈接。
本文與參考博文相比,主要有如下兩個不同:
1、開發語言換成了matlab,代碼部分稍作改動就可以實時運行在控制器上;
2、求取了從起點開始到達每一個頂點的最短路徑所經歷的頂點。
matlab代碼:包含測試數據
%參考鏈接https://www.cnblogs.com/kex1n/p/4178782.html DefultMaxValue=1e3; NodesMap=[0 1 12 DefultMaxValue DefultMaxValue DefultMaxValue; DefultMaxValue 0 9 3 DefultMaxValue DefultMaxValue; DefultMaxValue DefultMaxValue 0 DefultMaxValue 5 DefultMaxValue; DefultMaxValue DefultMaxValue 4 0 13 15; DefultMaxValue DefultMaxValue DefultMaxValue DefultMaxValue 0 4; DefultMaxValue DefultMaxValue DefultMaxValue DefultMaxValue DefultMaxValue 0]; % NodesMap=[0 6 3 DefultMaxValue DefultMaxValue DefultMaxValue; % 6 0 2 5 DefultMaxValue DefultMaxValue; % 3 2 0 3 4 DefultMaxValue; % DefultMaxValue 5 3 0 2 3; % DefultMaxValue DefultMaxValue 4 2 0 5; % DefultMaxValue DefultMaxValue DefultMaxValue 3 5 0]; Distance=NodesMap(1,:); %book結果初始化 SearchedFlag=zeros(1,length(Distance)); SearchedFlag(1)=1; FootsResults=zeros(size(NodesMap)); FootsResults(:,1)=1; Preview=zeros(1,length(Distance)); Preview(1)=1; for i=2:length(SearchedFlag) i MinID=1; MinValue=DefultMaxValue; Distance SearchedFlag for j=1:length(SearchedFlag) if SearchedFlag(j)==0 && Distance(j)<MinValue MinID=j; MinValue=Distance(j); end end MinID SearchedFlag(MinID)=1; Preview if i>2 FootsResults(i,i-1)=Preview(MinID); for j=1:(i-1) Temp=FootsResults(j,:); FindFlag=0; for k=1:length(SearchedFlag) if Temp(k)==0 if Temp(k-1)==Preview(MinID) FindFlag=1; break; end end end if FindFlag==1 break; end end Temp FootsResults(i,:)=Temp; FootsResults(i,k)=MinID; else FootsResults(i,i)=MinID; end FootsResults for j=1:length(SearchedFlag) if NodesMap(MinID,j)<DefultMaxValue && SearchedFlag(j)==0 if Distance(j)>(Distance(MinID)+NodesMap(MinID,j)) Distance(j)=Distance(MinID)+NodesMap(MinID,j); % FootsResults(i,j)=MinID; Preview(j)=MinID; end end end end % Preview Distance
測試算例1 2所用數據都在代碼中,大家可自行運行程序,查看結果。