迪傑斯特拉算法 最短路

#include<stdio.h>
#include<string.h>
#include<algorithm>
int m,n;
int from[999][999];
int ans;
int vis[999],dis[999];
void prim()
{
    int i,j,k;
    int idex;
    ans=0;idex=0;
    memset(dis,0,sizeof(dis));
    memset(vis,0,sizeof(vis));
    for(i=0;i<=m;i++)dis[i]=from[1][i];
    vis[1]=1;
    for(i=2;i<=m;i++)
    {
        int max=1000000;
        for(j=1;j<=m;j++)
        {
            if(!vis[j]&&dis[j]<max)
            {
                max=dis[j];
                idex=j;
            }


        }
        vis[idex]=1;
        ans=ans+max;
        for(k=1;k<=m;k++)
        {
            if(!vis[k]&&dis[k]>from[idex][k]+dis[idex])//與最小生成樹的一點點不同
                dis[k]=from[idex][k]+dis[idex];
        }
    }
    printf("%d\n",ans);
    return;


}
int main()
{
    int S,E,W;
    int i,j;
    while(scanf("%d %d",&n,&m)!=EOF)
        {
            memset(from,0,sizeof(from));
           for(i=0;i<m;i++)
           {
                scanf("%d %d %d",&S,&E,&W);
                from[S][E]=W;
                from[E][S]=W;
           }
           prim();




        }


    return 0;
}


 

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