POJ 3268 Silver Cow Party 2个dijkstra

写2个dijkstra,一个逆向一个顺向

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

int dis[maxn],adj[maxn][maxn],d[maxn];
bool vis[maxn];
int m, n;

void dijkstra(int v)     //顺向
{
    int i ,j ,k, u, min;
    for(i=0;i<=n;i++)
    {
        dis[i]=adj[v][i];
        vis[i]=0;
    }
    vis[v]=1;dis[v]=0;
    for(i=1;i<n;i++)
    {
        min =INF;
        for(j=1;j<=n;j++)
        {
            if(min > dis[j]&&!vis[j])
            {
                min = dis[j];
                u = j;
            }
        }
        if(min == INF)break;
        vis[u] = 1;
        for(j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[u]+adj[u][j] < dis[j])
            {
                dis[j] = dis[u] +adj[u][j];
            }
        }
    }
}
void dijkstra2(int v)      //逆向
{
    int i, j ,k, u, min;
    for(i=0;i<=n;i++)
    {
        vis[i]=0;
        d[i]=adj[i][v];
    }
    vis[v]=1;dis[v]=0;
    for(i=1;i<=n;i++)
    {
        min =INF;
        for(j=1;j<=n;j++)
        {
            if(min > d[j]&&!vis[j])
            {
                min = d[j];
                u = j;
            }
        }
        if(min == INF)break;
        vis[u]=1;
        for(j=1;j<=n;j++)
        {
            if(!vis[j]&&d[u] + adj[j][u] < d[j])
            {
                d[j] = d[u] + adj[j][u];
            }
        }
    }
}
int main()
{
    int x,y, w,i,j,s,t;
    while(~scanf("%d%d%d",&n,&m,&t))
    {
        for(i=0;i<=n;i++)
        {
            for(j=0;j<=n;j++)
            adj[i][j]=INF;
        }
        while(m--)
        {
            scanf("%d%d%d",&x,&y,&w);
            if(adj[x][y] > w)
            {
                adj[x][y]=w;
            }
        }
        int max = - INF;
        dijkstra(t);
        dijkstra2(t);
        for(i=1;i<=n;i++)
        {
            if(i==t)continue;
            if(d[i]==INF||dis[i]==INF)continue;
            if(max < d[i] + dis[i])max =d[i]+dis[i];
        }
        printf("%d\n",max);
    }
    return 0;
}

 

posted @ 2012-07-24 18:17  To be an ACMan  Views(197)  Comments(0)    收藏  举报