poj1797

来源:互联网 发布:手机隐藏软件工具 编辑:程序博客网 时间:2024/05/21 09:02

承接 上一道的dij最短路  这次 虽然一次就有了正确的思路 写出来了大部分正确的代码 但还是 败在了一个地方

输入路的时候  路是无向的  所以map[x][y]=map[y][x]

........................................一直WA在这里

#include <iostream>#include <cstdio>#include <cstring>#define MAX 1001using namespace std;int d[MAX],r[MAX][MAX],n,m;bool visi[MAX];void init(){    memset(r,0,sizeof(r));    memset(visi,0,sizeof(visi));    scanf("%d %d",&n,&m);    int x,y,v;    for(int i=1;i<=m;++i)    {        scanf("%d %d %d",&x,&y,&v);        r[x][y]=r[y][x]=v;    }}int dij(){    for(int i=1;i<=n;++i)        d[i]=r[1][i];    for(int i=1;i<=n;++i)    {        int x=0,u=-1;        for(int j=1;j<=n;++j)            if(!visi[j]&&d[j]>u)                u=d[x=j];        if(x==0) break;        visi[x]=true;        for(int j=1;j<=n;++j)            if(!visi[j]&&r[x][j]>0)                d[j]=max(d[j],min(d[x],r[x][j]));    }    return d[n];}int main(){    int t;    cin>>t;    for(int i=1;i<=t;++i)    {        init();        printf("Scenario #%d:\n",i);        printf("%d\n\n",dij());    }    return 0;}


0 0