标签: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 }
后悔上了邻接矩阵的贼船
标签:har print oid dfs char read c++ next style
原文地址:https://www.cnblogs.com/Asurudo/p/10050689.html