畅通工程续

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int inf=0x7fffffff;
int map[210][210],N,M,dis[210],visit[210];
int dij(int x,int y )
{
 int i,j,t,k;
 for(i=0;i<N;i++)
  {
   dis[i]=map[x][i];
   visit[i]=0;
  }
for(i=0;i<N;i++)
 {
   t=inf;
    for(j=0;j<N;j++)
    {
      if(!visit[j]&&t>dis[j])
      {
          t=dis[j];
          k=j;
      }
    }
   visit[k]=1;
   for(j=0;j<N;j++) 
    if(!visit[j]&&map[k][j]!=inf&&dis[j]>dis[k]+map[k][j])
     dis[j]=map[k][j]+dis[k];
 }
 if(x!=y) //如果起点和终点相同。。0
 return dis[y];
 else
 return 0;
}
          
   
  
int main( )
{
 while(scanf("%d%d",&N,&M)!=EOF)
 {
  
  int i,j,k,m,n,a,b,c,s,e;
  for(i=0;i<310;i++)
  dis[i]=inf;
  for(i=0;i<N;i++)
   for(j=0;j<N;j++)
    map[j][i]=inf;    
 for(i=0;i<M;i++)
  {
   scanf("%d%d%d",&a,&b,&c);
   if(c<map[a][b])
    map[a][b]=map[b][a]=c; //选最小的路。
  }
  scanf("%d%d",&s,&e);
  k=dij(s,e);
  if(k!=inf)
  printf("%d\n",k);
  else
  printf("-1\n");
}
return 0;
}
   
这道题wa了好几次啊。。很多细节没处理。。

posted on 2011-04-30 13:01  more think, more gains  阅读(114)  评论(0编辑  收藏  举报

导航