畅通工程续

 hdoj 1874

题目大意:给出一个有向图,求从某点到另一点的最短路径

解决:迪杰斯特拉求単源点到其它点的最短路径

#include <iostream>

using namespace std;

#define N 200

#define MAX 0xffffff

int cost[N+10][N+10];

int vis[N+10];

int dist[N+10];

int n;

void init()

{

    for(int i=0;i<n;i++)

      for(int j=0;j<n;j++)

       cost[i][j]=MAX;

}

int dijistra(int start,int end)

{

    for(int i=0;i<n;i++)

    {

        dist[i]=cost[start][i];

        vis[i]=false;

    }

    vis[start]=1;

    dist[start]=0;

    int pre;

    for(int i=1;i<n;i++)

    {

        int min=MAX;

        for(int j=0;j<n;j++)

           if(!vis[j] && dist[j]<min){min=dist[j];pre=j;}

        vis[pre]=1;

        for(int j=0;j<n;j++)

        if(!vis[j] && min+cost[pre][j]<dist[j])

        {

            dist[j]=min+cost[pre][j];

        }

    }

    return dist[end];

}

int  main()

{

    int m;

    while(cin>>n>>m)

    {

        int i,a,b,w;

        init();

        for(i=0;i<m;i++)

        {//刚开始一直wa,就是因为没写这句话

            cin>>a>>b>>w;

            if(w<cost[a][b])

            {

                cost[a][b]=cost[b][a]=w;

            }

        }

       cin>>a>>b;

      

       int ret=dijistra(a,b);

       if (ret==MAX)cout<<"-1"<<endl;

       else  cout<<ret<<endl;

    }

  //  system("pause");

    return 0;

}

你可能感兴趣的:(畅通工程续)