POJ 3628(最短路)

来源:互联网 发布:怎样做软件开发 编辑:程序博客网 时间:2024/06/05 05:12

题目连接:http://poj.org/problem?id=3268


AC代码:

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>using namespace std;const int M=1e6+100;const int N=1e3+100;const int INF=0x3f3f3f3f;typedef long long ll;int n,m;int map1[N][N];int map2[N][N];int dis1[N];int dis2[N];//dis数组记录节点x到其他点的最短路长度void dijkstra(int ma[][N],int dis[],int x){    int u;    int vis[N]={0};//记录某点是否被处理过    fill(dis,dis+N,INF);    dis[x]=0;    for(int i=1;i<=n;i++){        int mi=INF;        for(int j=1;j<=n;j++){            if(!vis[j]&&mi>dis[j]){                mi=dis[j];                u=j;            }        }        vis[u]=1;        for(int j=1;j<=n;j++){            if(!vis[j]&&dis[j]>dis[u]+ma[u][j])                dis[j]=dis[u]+ma[u][j];        }    }}int main(){    int a,b,t,x;    int ans=0;    cin>>n>>m>>x;        for(int i=1;i<=n;i++){        for(int j=1;j<=n;j++){            map1[i][j]=INF;            map2[i][j]=INF;        }    }    for(int i=1;i<=m;i++){        scanf("%d%d%d",&a,&b,&t);        map1[a][b]=t;        map2[b][a]=t;    }    dijkstra(map1,dis1,x);    dijkstra(map2,dis2,x);    for(int i=1;i<=n;i++){        if(ans<dis1[i]+dis2[i])            ans=dis1[i]+dis2[i];    }        printf("%d\n",ans);    return 0;}
注:参考别人代码