您的位置:首页 > 其它

单源最短路(Dijkstra)-poj1502

2013-08-10 13:29 225 查看
题意:求从第一个人到其他所有人的传播的最短时间,可以同时传给很多人。

思路:Dijkstra算法求最短路,其中最大的就是需要的最小时间。

#include<iostream>
#include<climits>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
int map[110][110];
int dis[110];
int n;
void dijstra()
{
    bool vis[110];
    for(int i=2; i<=n; i++)
    {
        dis[i]=map[1][i];
        vis[i]=0;
    }
    dis[1]=0;
    vis[1]=1;
    int x;
    for(int i=2; i<=n; i++)
    {
        int min1=1000000;
        for(int j=2; j<=n; j++)
            if(!vis[j]&&dis[j]>0&&dis[j]<min1)
            {
                min1=dis[j];
                x=j;
            }
        vis[x]=1;
        for(int j=1; j<=n; j++)
            if(map[j][x]>0)
            if(dis[j]>dis[x]+map[j][x])
                dis[j]=dis[x]+map[j][x];
    }
}
int main()
{
//freopen("in.txt","r",stdin);
    char x[10];
    while(cin>>n)
    {
        for(int i=1; i<=n; i++)
            for(int j=1; j<=i; j++)
            {
                if(i==j)
                    map[i][j]=0;
                else
                {
                    cin>>x;
                    getchar();
                    if(strcmp(x,"x")==0)
                        map[i][j]=map[j][i]=1000000;
                    else
                        map[i][j]=map[j][i]=atoi(x);
                }
            }
        dijstra();
        int sum=0;
        int min1=0;
        for(int i=2; i<=n; i++)
            if(dis[i]>min1)
                {min1=dis[i];}
        cout<<min1<<endl;
        }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: