zoukankan      html  css  js  c++  java
  • MPI Maelstrom POJ 1502

    http://poj.org/problem?id=1502

    题意:这是一个下三角,上三角跟下三角图形一致,(若是完整的矩阵的话, 相当于 Map[i][j] 的距离为相对应的数值)这道题也一样。 不同的是 若 显示的为 ‘x’字母时, 说明Map[i][j]为正无穷, 两个点之间不通。 现在的问题是:求1到2, 1到3, .... 1到n 之中哪条路是最长的。

    ****

    英语真的是太渣,表示看懂题意不是一般的难啊, 但是看懂题意后真的好简单 %>_<% 。。

    不要再考我英语了,我诚实的说四级还没过  %>_<%。。。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    #define maxn 110
    #define oo 0x3f3f3f3f
    int maps[maxn][maxn], v[maxn], dist[maxn];
    int n;
    
    void Init()
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(i==j)
                    maps[i][j] = 0;
                else
                    maps[i][j] = maps[j][i] = oo;
            }
        }
    }
    
    void Dij()
    {
        memset(v, 0, sizeof(v));
        memset(dist, 0, sizeof(dist));
        for(int i=1; i<=n; i++)
            dist[i] = maps[1][i];
            v[1] = 1;
    
        for(int i=1; i<n; i++)
        {
            int index, mins = oo;
    
            for(int j=1; j<=n; j++)
            {
                if(!v[j] && dist[j] <mins)
                {
                    index = j;
                    mins = dist[j];
                }
            }
    
            v[index] = 1;
    
            for(int j=1; j<=n; j++)
            {
              if(dist[j] > mins + maps[index][j] && !v[j])
                dist[j] = mins + maps[index][j];
            }
        }
    
        int ans = 0;
         for(int i=1; i<=n; i++)
            ans = max(ans, dist[i]);
    
        printf("%d
    ", ans);
    }
    
    int main()
    {
        char str[maxn];
        int num;
    
        while(scanf("%d", &n)!=EOF)
        {
    
             Init();
    
            for(int i=2; i<=n; i++)
            {
                for(int j=1; j<i; j++)
                {
                    scanf("%s", str);
                   if(str[0] != 'x')
                   {
                       sscanf(str, "%d", &num);
                       maps[i][j] = maps[j][i] = min(maps[i][j], num);
                   }
                }
            }
    
            Dij();
    
        }
    
        return 0;
    }
    View Code

     

  • 相关阅读:
    [note]抽象类和接口的相同点和不同点
    百度竞价门再跟踪:违规医疗广告数量仍大幅增加
    获取拼音的第一个字母的方法
    一个分页存储过程
    正则表达式(Regular Expressions)
    四个故事
    Oracle 常用
    我很喜欢的一个[帖子]:从现在起,我开始还债。
    DataGrid 中的 HyperLinkColumn (可以携带多个Get参数)
    100 statements in English.
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5698105.html
Copyright © 2011-2022 走看看