最短路模板

 1、鄰接矩陣+迪傑斯特拉

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAX=3e2;
const LL INF=0x3f3f3f3f;
LL n,m,s,t,k;
LL dis[MAX+5];
LL a[MAX+5][MAX+5];
bool vis[MAX+5];

void diji(LL s)
{
    vis[s]=true;
    while(1){
        LL k=-1,len=INF;
        for(LL i=1;i<=n;i++){
            if(!vis[i]&&len>dis[i]){
                len=dis[i];
                k=i;
            }
        }
        if(k==-1){
            break;
        }
        vis[k]=1;
        for(LL i=1;i<=n;i++){
            if(!vis[i]&&dis[i]>dis[k]+a[k][i]){
                dis[i]=dis[k]+a[k][i];
            }
        }
    }
}
int main()
{
    while(scanf("%lld%lld",&n,&m)!=EOF){
        if(n==0&&m==0){
            break;
        }
        s=1,t=n;
        for(LL i=1;i<=n;i++){
            for(LL j=1;j<=n;j++){ ///鄰接矩陣要初始化
                if(i==j) a[i][j]=0;
                else a[i][j]=INF;
            }
        }
        for(LL i=0;i<m;i++){
            LL u,v,w;
            scanf("%lld%lld%lld",&u,&v,&w);
            a[u][v]=w;
            a[v][u]=w;
        }
        for(LL i=1;i<=n;i++){ ///dis數組表示起點s到各個點的距離
            dis[i]=a[s][i];
            vis[i]=false;
        }
        diji(s);
        printf("%lld\n",dis[t]);
    }
    return 0;
}

2、鏈式前向星+

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