zoukankan      html  css  js  c++  java
  • Uva 140 Bandwidth

    Bandwidth 

    给你一个以邻接表展现的图的节点以及其相邻的节点,这时你将所有出现过的节点随机排列,找出此排序中相邻节点之间距离最长的值代表此排列的值,而这只是其中一种排列,你要找出所有排列中这种代表的值得最小值,并将有最小值的串的排列情况输出

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=76

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 #define VALUE 12
     6 #define INF 1000000
     7 using namespace std;
     8 int graph[VALUE][VALUE]; //邻接表存储图 
     9 char input[VALUE*VALUE+10]; //输入 
    10 int list[27], store[27]; //list存储所有的节点,store存储当前有最小值的排列 
    11 int main()
    12 {
    13     #ifndef ONLINE_JUDGE
    14     freopen("input.txt", "r", stdin);
    15     #endif
    16     int i, j, t, len, temp, start, point, cnt;
    17     int _max, _min;
    18     while(scanf("%s", input) != EOF)
    19     {
    20         if(strcmp(input, "#") == 0) break;
    21         memset(list, 0, sizeof(list));
    22         memset(graph, 0, sizeof(graph));
    23         len = strlen(input);
    24         cnt = 0;
    25         for(i=0; i<len; ++i)
    26         {//处理输入,所有的字符都转换成整型 
    27             start = input[i] - 'A';
    28             for(t=0; t<cnt && list[t] != start; ++t);
    29             if(t >= cnt) list[cnt++] = start;
    30             for(i=i+2; input[i] != ';' && i<len; ++i)
    31             {
    32                 point = input[i] - 'A';
    33                 for(t=0; t<cnt && list[t] != point; ++t);
    34                 if(t >= cnt) list[cnt++] = point;
    35                 graph[start][++graph[start][0]] = point;
    36             }
    37         }
    38         sort(list, list+cnt);
    39         _min = INF;
    40         do
    41         {//每次循环list为不同的排列 
    42             _max = -INF;
    43             for(i=0; i<cnt; ++i)
    44             {
    45                 temp = list[i];
    46                 for(j=1; j<=graph[temp][0]; ++j)
    47                 {
    48                     for(t=0; t<cnt && list[t] != graph[temp][j]; ++t);
    49                     point = (int)fabs(i-t);
    50                     if(_max < point) _max = point;
    51                 }
    52             }
    53             if(_min > _max)
    54             {
    55                 _min = _max;
    56                 memcpy(store, list, sizeof(int)*cnt);
    57             }
    58             
    59         }while(next_permutation(list, list+cnt));
    60         for(i=0; i<cnt; ++i)
    61         printf("%c ", store[i]+'A');
    62         printf("-> %d\n", _min);
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    javascript 操作 excel 全攻略
    ASP.NET中上传并读取Excel文件数据
    创意无限!一组网页边栏过渡动画【附源码下载】
    jQuery一些常用特效方法使用实例
    jQuery的deferred对象详解
    Jquery 数组操作
    10 款精美的 CSS3 全新特效
    20 个用于处理页面滚动效果的 jQuery 插件
    Linux-exec命令试验驱动(12)
    动态规划-数正方形(详解)
  • 原文地址:https://www.cnblogs.com/liaoguifa/p/3050115.html
Copyright © 2011-2022 走看看