zoukankan      html  css  js  c++  java
  • POJ 1502 水 dij

    题意:给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
    ",maxx);
    }
  • 相关阅读:
    Java删除文件夹下所有文件
    Java写入文件的几种方法小结
    字符串String数据类型的探讨
    Java把数字格式化为货币字符串
    java.utilDate和java.sql.Date
    Java最小二乘法线性回归函数编码实现
    寄存器
    GCC
    linux zip
    缓存
  • 原文地址:https://www.cnblogs.com/tun117/p/4822251.html
Copyright © 2011-2022 走看看