zoukankan      html  css  js  c++  java
  • 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 }

    后悔上了邻接矩阵的贼船

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/Asurudo/p/10050689.html
Copyright © 2011-2022 走看看