【c++】Dijkstra算法完整代碼

Dijkstra算法:

#include <iostream>
using namespace std;

void Matrixgraph::Dijstra(int begin){    //按路徑長度遞增的次序產生最短路徑的算法
    int visit[MAX]={0};
    int path[MAX],dis[MAX];
    for(int i=0;i<vexnum;i++){
        dis[i]=edgematrix[begin][i];
        path[i]=begin;
    }
    dis[begin]=0;
    visit[begin]=1;
    int v=0; //每次求得v0到某個頂點的最短路徑 把v加入到集合
    for(int i=0;i<vexnum;i++){
        if(i==begin) continue;
        int min=INIT;
        for(int j=0;j<vexnum;j++){
            if(!visit[j]&&dis[j]<min){
                min=dis[j];
                v=j;
            }
        }  //找出頂點的最短路徑
        visit[v]=1;  //訪問路徑最短的頂點
        for(int j=0;j<vexnum;j++){   //這個頂點直接的下一個和重新開始一條路徑哪個更小
            if(!visit[j]&&min+edgematrix[v][j]<dis[j]){
                dis[j]=min+edgematrix[v][j];
                path[j]=v;
            }
        }
    }
    for(int i=0;i<vexnum;i++){
        if(i==begin) continue;
        int que[MAX]={0};
        int index=0;
        que[index]=i;
        index++;
        int temp=path[i];
        while(temp!=begin){
            que[index]=temp;
            index++;
            temp=path[temp];
        }
        que[index]=begin;
        cout<<"  v"<<begin<<"-> v"<<i<<": ";
        for(int j=index;j>0;j--)
            cout<<data[que[j]]<<"->";
        cout<<data[que[0]]<<"	路徑長度爲: "<<dis[i]<<endl;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章