美文网首页
最短路径-迪杰斯特拉算法

最短路径-迪杰斯特拉算法

作者: czpchen | 来源:发表于2019-02-03 20:24 被阅读0次

算法模板

const int edge=7;             //edge为边长
const int INF=100000000;  //无穷大,表示两点之间无路径

void Dijkstra(int g[edge][edge],int v,int dist[],int path[]){  //dist存储最短路径  path表示最短路径的上一点
    int set[edge];   //记录数组  
    int min,i,j,u;
    
    for(i=0;i<edge;i++){  // 初始化
        dist[i]=g[v][i];
        set[i]=0;
        if(g[v][i]<INF)
            path[i]=v;
        else
            path[i]=-1;
    }
    
    set[v]=1;path[v]=-1;
    
    for(i=0;i<edge-1;i++){   // 开始寻找最短路径 时间复杂度O(n²)
        min=INF;
        for(j=0;j<edge;j++){
            if(set[j]==0&&dist[j]<min){
                u=j;
                min=dist[j];
            }
        }
        
        set[u]=1;
        for(j=0;j<edge;j++){
            if(set[j]==0&&dist[u]+g[u][j]<dist[j]){
                dist[j]=dist[u]+g[u][j];
                path[j]=u;
            }
        }
    }   
}

输出最短路径依次经过的点需要借助栈,最短路径保存在dist[]中,直接取就行了

const int maxSize=100000;
void printPath(int path[],int a){
    int stack[maxSize],top=-1;  //借助栈
    while(path[a]!=-1){
        stack[++top]=a;
        a=path[a];
    }
    stack[++top]=a;
    
    while(top!=-1)
        cout << stack[top--] << " "; 
}

相关文章

网友评论

      本文标题:最短路径-迪杰斯特拉算法

      本文链接:https://www.haomeiwen.com/subject/ngfusqtx.html