0
点赞
收藏
分享

微信扫一扫

最短路径,迪杰斯特拉算法。

大明宫 2022-04-02 阅读 68
算法

 

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    int p;
    int book[n+1];
    int dst[n+1];
    scanf("%d",&n);
    scanf("%d",&p);
    int mp[n+1][n+1];
        for(int i=0;i<n+1;i++)
        for(int j=0;j<n+1;j++)
        {
            mp[i][j]=999999999;
        }
    for(int i=0;i<p;i++)
    {   
        int a,b,c;
        cin>>a;
        cin>>b;
        cin>>c;
        mp[a][b]=c;
    }
    
 int u;/***离源点最近的点***/
int minx;
for(int i=1;i<=n;i++) dst[i]=mp[1][i];
for(int i=1;i<=n;i++) book[i]=0;
book[1]=1;
    
    for(int i=1;i<=n;i++){
        minx=999999999;
    for(int j=1;j<=n;j++){
        if(book[j]==0&&dst[j]<minx){
            minx=dst[j];
            u=j;
        }
    }
    book[u]=1;
    /***更新最短路径数组***/
    for(int k=1;k<=n;k++){
        if(book[k]==0&&dst[k]>dst[u]+mp[u][k]&&mp[u][k]<999999999){
            dst[k]=dst[u]+mp[u][k];
        }
        
    }
}
    int max=0;
    for(int i=1;i<=n;i++)
    {
        if(dst[i]>max&&dst[i]!=999999999)
            max=dst[i];
    } 
    
    cout<<max<<endl;
    
   
    
    
    
}
举报

相关推荐

0 条评论