POJ 1797 Heavy Transportation 最短路 修改一下dijkstra

dijkstra略微做下修改

View Code
#include<stdio.h>
#include<string.h>
#define maxn 1001
#define INF 100000000

int MIN(int a, int b)
{
    return a < b ? a : b;
}
int dis[maxn],adj[maxn][maxn];
bool vis[maxn];
int n, m;

void dijkstra(int v)
{
    int i, j, k, u, max;
    for(i=1;i<=n;i++)
    {
        dis[i]=adj[v][i];
        vis[i]=0;
    }
    vis[v]=1;dis[v]=0;
    for(i=1;i<n;i++)
    {
        max = 0;
        for(j=1;j<=n;j++)
            if(max < dis[j]&&!vis[j])
            {
                max = dis[j];
                u = j;
            }
        if(max == 0)break;
        vis[u]=1;
        for(j=1;j<=n;j++)
        {
            if(dis[j] < MIN(adj[u][j],dis[u])&&!vis[j])
            {
                dis[j] = MIN(adj[u][j],dis[u]);
            }
        }
    }
}
int main()
{
    int i, j, x, y, w, X=1,cas;
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                adj[i][j]=-1;
        while(m--)
        {
            scanf("%d%d%d",&x,&y,&w);
            if(adj[x][y] < w)
            {
                adj[x][y]=w;
                adj[y][x]=w;
            }
        }
        dijkstra(1);
        printf("Scenario #%d:\n%d\n",X++, dis[n]);
        if(X!=cas)puts("");
    }
    return 0;
}

 

posted @ 2012-07-23 23:32  To be an ACMan  Views(174)  Comments(0)    收藏  举报