poj1797 2010.2.8
#include <stdio.h>
#include <string.h>
#define N 1000+10
int w[N][N],k,n,m,d[N],v[N];
void init();
void dijkstra();
int min(int,int);
int min (int a,int b)
{
if (a<b) return a;
else return b;
}
void init()
{
int j,x1,x2,x3,i;
for(j=1;j<=m;j++)
{
scanf("%d %d %d",&x1,&x2,&x3);
w[x1][x2]=x3;
w[x2][x1]=x3;
}
// for(i=1;i<=n;i++)
// {
// for(j=1;j<=n;j++)
// printf("%6d",w[i][j]);
// printf("\n\n\n\n");
// }
}
void dijkstra()
{
int i,x,y,max,tt,p;
memset(d,0,sizeof(d));
memset(v,0,sizeof(v));
for(i=2;i<=n;i++)
if (w[1][i])
{
d[i]=w[1][i];
// printf("*******%d\n",i);
}
for(i=2;i<=n;i++)
{
max=1;
for(x=2;x<=n;x++)
if ((d[max]<d[x])&&(!v[x])) max=x;
// for(p=1;p<=n;p++)
// printf("%d %6d\n",p,v[p]);
v[max]=1;
// printf("max %d\n",max);
for(y=2;y<=n;y++)
if (w[max][y])
{
tt=min(w[max][y],d[max]);
if (d[y]<tt) d[y]=tt;
} 就是这里,把 max 都敲成了 x,导致一直出错。
// for(p=1;p<=n;p++)
// printf("%d %6d\n",p,d[p]);
}
// for(i=1;i<=n;i++)
// printf("%d %6d\n",i,d[i]);
// printf("\n");
}
void main()
{
int i;
scanf("%d",&k);
for (i=1;i<=k;i++)
{
printf("Scenario #%d:\n",i);
scanf("%d %d",&n,&m);
memset(w,0,sizeof(w));
init();
dijkstra();
printf("%d\n\n",d[n]);
}
}