现在的位置: 首页 > 综合 > 正文

hdu 1874 畅通工程续

2018年04月26日 ⁄ 综合 ⁄ 共 678字 ⁄ 字号 评论关闭
注意从0开始,计算时应计算dis[y],y是终点,如果防止错,所有的输入可以加上1,表示从1开始

#include<stdio.h>
#include<string.h>
#define data 1000000
int map[1100][1100];
int dis[1100];
int vis[1100];
int main()
{
 int n,m,p,i,j;
 while(scanf("%d%d",&n,&m)!=EOF)
 {
  memset(vis,0,sizeof(vis));
  for(i=0;i<=n;i++)
   for(j=0;j<=n;j++)
    map[i][j]=data;
  int a,b,t;
  for(i=1;i<=m;i++)
  {
   scanf("%d%d%d",&a,&b,&t);
   if(map[a][b]>t) map[a][b]=map[b][a]=t;
  }
  int x,y;
  scanf("%d%d",&x,&y);
  for(i=0;i<=n;i++)
   dis[i]=(i==x?0:data);
  for(i=0;i<=n;i++)
  {
   int x1,M=data;
   for(j=0;j<=n;j++)
    if(!vis[j]&&dis[j]<=M)
    {M=dis[j];x1=j;}
    vis[x1]=1;
    for(j=0;j<=n;j++)
     dis[j]=dis[j]<dis[x1]+map[x1][j]?dis[j]:dis[x1]+map[x1][j];
  }
  if(dis[y]!=data)
  printf("%d\n",dis[y]);
  else printf("-1\n");
 }
 return 0;
}

注意是无向图
 

抱歉!评论已关闭.