男人嘛,就应该暴力点 #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #include <cmath> using namespace std ; const int maxn = 100 + 10 ; char str[maxn] ; int ans , order[maxn] , torder[maxn] , cnt , g[27][27] , vis[27] ; void init() { ans = 2147483647 ; cnt = 0 ; memset( g , 0 , sizeof( g ) ) ; memset( vis , 0 , sizeof( vis ) ) ; memset( order , 0 , sizeof( order ) ) ; memset( torder , 0 , sizeof( torder ) ) ; return ; } void input() { int len = strlen( str ) ; for( int i = 0 ; i < len ; ) if( isalpha( str[i] ) ) { // cout << str[i] << " " ; int u = str[i++]-'A' ; i++ ; // int u = torder[cnt++] ; if( !vis[u] ) { vis[u] = 1 ; torder[cnt++] = u ; } while( str[i] != ';' && i < len ) { // cout << str[i] << " " ; if( isalpha(str[i]) ) { int v = str[i]-'A' ; if( !vis[v] ) { vis[v] = 1 ; torder[cnt++] = v ; } g[u][v] = g[v][u] = 1 ; ++i ; } else ++i ; } i++ ; } else { ++i ; } // for( int i = 0 ; i < cnt ; ++i ) // { // for( int j = 0 ; j < cnt ; ++j ) // if( g[torder[i]][torder[j]] ) // cout << ( char )( torder[i]+'A' ) << (char)(torder[j]+'A') ; // cout << endl ; // } } int cmp( const void * _a , const void * _b ) { int * a = ( int * ) _a ; int * b = ( int * ) _b ; return *a - *b ; } void solve() { qsort( torder , cnt , sizeof( int ) , cmp ) ; do { int temp = 0 ; for( int i = 0 ; i < cnt ; ++i ) for( int j = 0 ; j < cnt ; ++j ) if( g[torder[i]][torder[j]] ) { if( temp < abs(j-i) ) temp = abs( j-i ) ; } if( ans > temp ) { memcpy( order , torder , sizeof( torder ) ) ; ans = temp ; } }while( next_permutation( torder , torder+cnt ) ) ; return ; } void output() { for( int i = 0 ; i < cnt ; ++i ) cout << (char)(order[i]+'A') << " " ; cout << "-> " << ans << endl ; return ; } int main() { while( gets(str) && str[0] != '#' ) { init() ; input() ; solve() ; output() ; } return 0 ; }