• UVa-140 Bandwidth


      1 #include <bits/stdc++.h>
      2 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
      3 using namespace std;
      4 
      5 const char a[27] = {'A','B','C','D','E','F','G','H','I','J',
      6                     'K','L','M','N','O','P','Q','R','S','T',
      7                     'U','V','W','X','Y','Z'
      8                    };
      9 char s[393] {0};
     10 int m[27][27] {0};
     11 char rnts[39] {0};
     12 int rnt = INT_MAX;
     13 char ns[39] {0};
     14 int n;
     15 
     16 void addedge(int a,int b)
     17 {
     18     m[a][b] = m[b][a] = 1;
     19 }
     20 void read()
     21 {
     22     _for(i,0,strlen(s))
     23         if(s[i]==':')
     24             for(int j = i+1;s[j]!=''&&s[j]!=';';j ++)
     25                 addedge(s[i-1]-'A',s[j]-'A');
     26 }
     27 
     28 void dfs()
     29 {
     30     if(strlen(s)==1)
     31     {
     32         rnt = 0;
     33         rnts[0] = s[0];
     34         n = 1;
     35         return ;
     36     }
     37     int hash[27] {0};
     38     _for(i,0,27)
     39         _for(j,0,27)
     40             if(m[i][j])
     41                 hash[j] ++;
     42     int ns_end = 0;
     43     _for(i,0,27)
     44         if(hash[i])
     45             ns[ns_end++] = 'A'+i;
     46     n = ns_end;
     47     do
     48     {
     49         int maxt = INT_MIN;
     50         _for(i,0,27)
     51         {
     52             int maxtn = INT_MIN;
     53             _for(j,0,27)
     54             {
     55                 if(m[i][j])
     56                 {
     57                     int ai,bi;
     58                     _for(k,0,27)
     59                     {
     60                         if(ns[k]=='A'+i)
     61                             ai = k;
     62                         if(ns[k]=='A'+j)
     63                             bi = k;
     64                     }
     65                     int trnt = abs(ai-bi);
     66                     maxtn = max(trnt,maxtn);
     67                 }
     68             }
     69             maxt = max(maxt,maxtn);
     70             if(maxt>rnt)
     71                 break;
     72         }
     73         if(maxt<rnt)
     74             strcpy(rnts,ns);
     75         rnt = min(rnt,maxt);
     76     }while(next_permutation(ns,ns+strlen(ns)));
     77 }
     78 
     79 void output()
     80 {
     81     _for(i,0,n)
     82         printf("%c ",rnts[i]);
     83     printf("-> %d
    ",rnt);
     84 }
     85 
     86 int main()
     87 {
     88     while(scanf("%s",s)==1 && s[0]!='#')
     89     {
     90         read();
     91         dfs();
     92         output();
     93         memset(s,0,sizeof(s));
     94         memset(m,0,sizeof(m));
     95         memset(ns,0,sizeof(ns));
     96         memset(rnts,0,sizeof(rnts));
     97         rnt = INT_MAX;
     98         n = 0;
     99     }
    100     return 0;
    101 }

    后悔上了邻接矩阵的贼船

  • 相关阅读:
    Linux安装JDK1.8
    两台Linux主机之间文件的复制
    Tigase数据库结构(1)
    应用架构之接入层原理
    MySQL开发规范
    Google MapReduce到底解决什么问题?
    使用 RestTemplate 调用 restful 服务
    App开放接口API安全性 — Token签名sign的设计与实现
    深入探讨 Java 类加载器
    Java 的 I/O 类库的基本架构
  • 原文地址:https://www.cnblogs.com/Asurudo/p/10050689.html
Copyright © 2020-2023  润新知