poj 1135求算法大牛指教,该如何解决

poj 1135求算法大牛指教[codeC/C++][/code]#include stdio.h#define INF 2147483647#define MAXN 505in

poj 1135求算法大牛指教
[code=C/C++][/code]#include <stdio.h>
#define INF 2147483647
#define MAXN 505
int Edge[MAXN][MAXN];
int sys=1;//测试数据号
int time[MAXN];//第i个牌倒下的时间
int s[MAXN];//记录第i个牌是否倒下
int n,m;
int v1,v2,t;
void read()
{
  for(int i=0;i<n;i++)
  {
  for(int j=0;j<n;j++) Edge[i][j]=INF;
  }
  for(int i=0;i<m;i++)
  {
  scanf("%d %d %d",&v1,&v2,&t);
  v1--;
  v2--;
  Edge[v1][v2]=Edge[v2][v1]=t;
  }
}
void dijkstra()
{
  for(int i=0;i<n;i++)
  {
  time[i]=Edge[0][i];
  s[i]=0;
  }
  s[0]=1;time[0]=0;
  for(int i=0;i<n;i++)
  {
  int u=0,min=INF;
  for(int j=0;j<n;j++)
  {
  if(!s[j]&&time[j]<min)
  {
  min=time[j];
  u=j;
  }
  }
  s[u]=1;
  for(int k=0;k<n;k++)
  {
  if(!s[k]&&Edge[u][k]<INF&&time[u]+Edge[u][k]<time[k])
  time[k]=time[u]+Edge[u][k];
  }
  }
  double max1=-INF;
  int pos1;
  for(int i=0;i<n;i++)
  {
  if(time[i]>max1)
  {
  max1=time[i];
  pos1=i;
  // printf("%lf\n",max1);
  }
  }

  double max2=-INF,t;
  int pos2,pos3;
  for(int i=0;i<n;i++)
  {
  for(int j=0;j<n;j++)
  {
  t=(time[i]+time[j]+Edge[i][j])/2.0;
  if(t>max2&&Edge[i][j]<INF)
  {
  max2=t;
  pos2=i;
  pos3=j;
  }
  }
  }
  printf("System #%d\n",sys++);
  if(max2>max1) printf("The last domino falls after %.1lf seconds, between key dominoes %d and %d.\n\n",max2,pos2+1,pos3+1);
  else printf("The last domino falls after %.1lf seconds, at key domino %d.\n\n",max1,pos1+1);
}
int main()
{
  while(scanf("%d %d",&n,&m)!=EOF&&(n||m))
  {
  read();
  dijkstra();
  }
  return 0;
}


[解决办法]
无题目说明??