您的位置:首页 > 其它

poj 1125_迪杰斯特拉

2013-05-02 10:24 295 查看
题目描述:

  在无向图中进行留言散播。不定起点,边权为一次散播时间。求散播留言到全网的最小时间。

解题思路:

做v次迪杰斯特拉。每一次求从v点出发消息扩散的全网的最短时间Des[v]。在一次迪杰斯特拉中,求从v点出发到其余各点的最短时间,存到数组D[]中。计算完V到其余各点的消息扩散最短时间后,选择这个v点的D[]的最大值——即扩散到最远节点花费的时间,存为Des[v]。最后再Des[v]中选择最小值,为所求。

时间复杂度为O(v3
参考代码:

#include <stdio.h>

#include <stdlib.h>

#define Infinity 1000000000

#define N 101

int G

;

int Des
;

int D
,final
;

main()

{

   int
i,j,k,adj,min,max,tmp;

   int n, num;

  

  
scanf("%d",&n);

   while(n!=0)

   {

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

         
for(j=1;j<=n;j++)

            
G[i][j] = Infinity;

      
//G[][]

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

      
{

         
scanf("%d",&num);

         
for(j=1;j<=num;j++)

         


            
scanf("%d",&adj);

            
scanf("%d",&G[i][adj]);

         
}               

      
}   

      
for(k=1; k<=n; k++) //做n次迪杰斯特拉,得到Des[k]:
max(D[],排除自己)

      
{

         
//initial

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

         
{

            
D[i] = Infinity;

            
final[i] = 0;

         
}

         
final[k] = 1;

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

            
D[i] = G[k][i];

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