最短路模版--迪杰斯特拉

#include <stdio.h>
#include <string.h>
int map[200][200],v[200],dis[200];
int n,s,t;
#define N 100001
void DJ()
{
    int i,j,k,min;
    memset(v,0,sizeof(v));
    memset(dis,0,sizeof(dis));

    for(i=0;i<n;i++)
        dis[i]=map[s][i];
    for(i=0;i<n;i++)
    {
        min=N;
        for(j=0;j<n;j++)
            {
                if(!v[j]&&dis[j]<min)
                {
                    k=j;
                    min=dis[j];
                }
            }
         if(min==N)  break;
         v[k]=1;
         for(j=0;j<n;j++)
         {
             if(!v[j]&&dis[k]+map[k][j]<dis[j])
             {
                 dis[j]=map[k][j]+dis[k];
             }
         }

 

    }
    if(dis[t]==N)  printf("-1\n");//....
    else printf("%d\n",dis[t]);

}
int main()
{

    int m,i,j,u,v,x;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                map[i][j]=N;
                map[j][i]=N;
            }
            map[i][i]=0;
        }
        while(m--)
        {
            scanf("%d%d%d",&u,&v,&x);
            if(map[u][v]>x)
            {
                map[u][v]=x;
                map[v][u]=x;
            }
        }
        scanf("%d%d",&s,&t);
        DJ();
    }
    return 0;
}

posted @ 2014-04-17 20:01  人艰不拆_zmc  阅读(167)  评论(0编辑  收藏  举报