グローバルパス計画アルゴリズムDijkstra(ディジェストラアルゴリズム)-matlab

2737 ワード

ブログのリンクを参照: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)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)(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で使ったデータは全部コードの中にあります.みんなは自分でプログラムを実行して、結果を確認してもいいです.
 
転載先:https://www.cnblogs.com/geyanwu/p/10400446.html