码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1502 水 dij

时间:2015-09-19 22:32:32      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

题意:给N,表示N个节点。

给半个邻接矩阵,本身到本身的距离是0,边是双向的。当两个节点之间没有直接的边连接的时候,用x表示。

问从第一个节点到其他所有节点至少花费的时间。

这题唯一的处理是处理邻接矩阵的时候处理先当作字符串读入,然后处理一下数据,变成数据格式。

最后是输出第一个节点到其他所有节点最短路的最大值。

#include<stdio.h>
#include<string.h>
int n;
const int inf=99999999;
int pho[105][105];
char tmp[105][1000];
bool vis[105];
int dis[105];
void solve(int pos)
{
    vis[pos]=1;
    for(int i=1;i<=n;i++)
    {
        if(!vis[i]&&pho[pos][i]+dis[pos]<dis[i])
        {
            dis[i]=pho[pos][i]+dis[pos];
        }
    }
    int next=inf;
    int minn=inf;
    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            if(minn>dis[i])
            {
                minn=dis[i];
                next=i;
            }
        }
    }
    if(next<=n)
        solve(next);
}
int main()
{
    int len;
    int num;
    int ttt;
    scanf("%d",&n);
    getchar();
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            pho[i][j]=inf;
        }
        pho[i][i]=0;
        dis[i]=inf;
    }
    for(int i=2;i<=n;i++)
    {
        gets(tmp[i]);
    }
    for(int i=2;i<=n;i++)
    {
        num=0;
        len=strlen(tmp[i]);
        tmp[i][len]=32;
        ttt=0;
        for(int j=0;j<=len;j++)
        {
            if(tmp[i][j]==32)
            {
                num++;
                pho[num][i]=pho[i][num]=ttt;
                ttt=0;
            }
            else if(tmp[i][j]==x)
            {
                ttt=inf;
            }
            else
            {
                ttt*=10;
                ttt+=tmp[i][j]-48;
            }
        }
    }
    dis[1]=0;
    solve(1);
    int maxx=-1;
    for(int i=1;i<=n;i++)
    {
        if(maxx<dis[i])
            maxx=dis[i];
    }
    printf("%d\n",maxx);
}

 

POJ 1502 水 dij

标签:

原文地址:http://www.cnblogs.com/tun117/p/4822251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!