码迷,mamicode.com
首页 > 其他好文 > 详细

UVa-140 Bandwidth

时间:2018-12-01 22:11:52      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:har   print   oid   dfs   char   read   c++   next   style   

  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]!=\0&&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\n",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 }

后悔上了邻接矩阵的贼船

UVa-140 Bandwidth

标签:har   print   oid   dfs   char   read   c++   next   style   

原文地址:https://www.cnblogs.com/Asurudo/p/10050689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!