全局路徑規划算法Dijkstra(迪傑斯特拉算法)- matlab


參考博客鏈接: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所用數據都在代碼中,大家可自行運行程序,查看結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM