0
点赞
收藏
分享

微信扫一扫

2022.02.14学习总结((迪杰斯特拉)Dijkstra算法)

德州spark 2022-02-14 阅读 53

 

#include<bits/stdc++.h>
using namespace std;
int n,m,s,e;
int mp[205][205];
int low[205];
int vis[205];
void init()
{
    for(int i=1;i<=n;i++){
        low[i]=1e9;
        vis[i]=0;
    }
}
int Dij()
{
    for(int i=1;i<=n;i++){
        low[i]=mp[s][i];
    }
    low[s]=0;
    vis[s]=1;
    for(int i=2;i<=n;i++){
        int m=1e9,x=-1;
        for(int j=1;j<=n;j++){
            if(!vis[j]&&low[j]<m){
                    m=low[j];
            x=j;
        }}
    if(x==-1)break;
    vis[x]=1;
    for(int j=1;j<=n;j++){
       low[j]=min(low[j],low[x]+mp[x][j]);
    }

} return low[e];
}
int main()
{
    cin>>n;init();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
                if(i!=j){
            mp[i][j]=1e9;}else mp[i][j]=0;
        }
    }for(int i=1;i<n;i++){
    for(int j=i+1;j<=n;j++){
        cin>>mp[i][j];
    }
        }
        s=1,e=n;
        cout<<Dij()<<endl;
}
举报

相关推荐

0 条评论