您的位置:首页 > 其它

hdu2544 dijkstra最短路径问题

2013-08-12 20:30 190 查看
点击打开链接//********最短路径问题***********// 

//注意本题可能会存在两点之间有多条路径 //

#include<iostream>

#include<stdlib.h>

#include<limits.h>

#include<string.h>

using namespace std;

#define MP 10010//定义稍大些

#define NP 110

int map[NP][NP];

int dist[MP];

void  distance(int p,int map[][NP],int N)

{

      int s=-1;

      int visited[NP];//表示该点是否找到最短路径,1找到,0未找到

     

      memset(visited,0,sizeof(visited));

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

      {

            dist[i]=map[p][i];

      }

      visited[p]=1;//初始化改点

      for(int k=1;k<N;k++)

      {

           int min=INT_MAX;  

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

           {

                if(dist[i]<min&&!visited[i])

                {

                     min=dist[i];

                     s=i;

                }

           }

          //cout<<s<<" ";

          visited[s]=1;

          for(int i=2;i<=N;i++)

          {

                if(!visited[i]&&map[s][i]!=INT_MAX)

                {

                     if(dist[s]+map[i][s]<dist[i])

                     dist[i]=dist[s]+map[i][s];

                }

          }

      }

}                              

           

int main()

{

     int M,N,a,b,c,maxNode;

     while(cin>>N>>M)

     {

           maxNode=0;

           if(M==0&&N==0) break;

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

                 for(int j=i;j<=N;j++)

                 {

                       map[i][j]=map[j][i]=INT_MAX;

                 } 

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

           {

                 cin>>a>>b>>c;

                 maxNode=(maxNode>max(a,b))?maxNode:max(a,b);//存在两点之间有多条路径

                 //*******map[a][b]应该记录最短距离

                 map[a][b]=map[b][a]=(map[b][a]<c)?map[a][b]:c;

           }       

           distance(1,map,maxNode);

           cout<<dist
<<endl;

     }

     system("pause");

     return 0;

}  

          

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  水题