poj1797 Heavy Transportation

来源:互联网 发布:钢丝特种兵手套淘宝 编辑:程序博客网 时间:2024/05/16 07:45

题目让求从源点到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;}


0 0
原创粉丝点击