题目让求从源点到N的最大载重量,这是一道最短路Dijkstra的变形,稍加改动就可以了。
#include<stdio.h>
#include<stdlib.h>
int b[1100],dis[1100],e[1100][1100];
int Min(int a,int b)
{
return a<b?a:b;
}
int main()
{
int m,n,t1,t2,t3,i,j,v,u,max,T,k;
scanf("%d",&T);
for(k=1; k<=T; k++)
{
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)//初始化邻接矩阵
for(j=1; j<=n; j++)
e[i][j]=0;
for(i=1; i<=m; i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
if(e[t1][t2]<t3)
e[t1][t2]=e[t2][t1]=t3;
}
for(i=1; i<=n; i++)
{
dis[i]=e[1][i];
b[i]=0;
}
b[1]=1;
for(i=1; i<n; i++)
{
max=-999999;//初始化最大载重量
for(j=1; j<=n; j++)
{
if(b[j]==0&&dis[j]>max)
{
max=dis[j];
u=j;
}
}
b[u]=1;
for(v=1; v<=n; v++)
{
if(b[v]==0&&dis[v]<Min(dis[u],e[u][v]))//改动一下松弛条件,注意
dis[v]=Min(dis[u],e[u][v]);
}
}
printf("Scenario #%d:\n",k);
printf("%d\n",dis[n]);
printf("\n");
}
return 0;
}