UVa140 - Bandwidth
2015-02-12 23:36
218 查看
#include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> #include<cctype> using namespace std; const int maxn = 30; int a[maxn],b[maxn],n,best,k[10]={1}; bool g[maxn][maxn],vis[maxn]; bool read(){ char c=0,d=0; best=1<<30,n=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(g,0,sizeof(g)); memset(vis,0,sizeof(vis)); while(d!='\n'){ c = getchar(); if(c=='#') return false; if(!vis[c-'A']) ++n,vis[c-'A']=true; getchar(); while(isupper(d=getchar())){ if(!vis[d-'A'])++n,vis[d-'A']=true; g[c-'A'][d-'A']=true; g[d-'A'][c-'A']=true; } } return true; } int get_bw(){ int bw=0; for(int i=0; i<n; ++i){ if(!vis[a[i]]) continue; for(int j=0; j<n; ++j){ if(!vis[a[j]]) continue; if(g[a[i]][a[j]]) bw=max(abs(i-j), bw); if(bw>best) return bw; } } return bw; } void solve(){ int sum=k ; for(int i=0,j=0; i<n; ++i){ while(!vis[j]) ++j; a[i]=j++; } for(int i=0; i < sum; ++i){ int t=get_bw(); if(best>t){ for(int j=0; j<n; ++j) b[j]=a[j]; best=t; } next_permutation(a,a+n); } return; } int main() { for(int i=1; i<10; ++i) k[i]=i*k[i-1]; while(read()){ solve(); for(int i=0; i<n; ++i) printf("%c ",b[i]+'A'); printf("-> %d\n",best); } return 0; }
相关文章推荐
- UVa - 140 - Bandwidth
- uva140 - Bandwidth
- UVA140 ——bandwidth(搜索)
- UVA 140(p196)----Bandwidth
- Bandwidth UVA - 140(next_premutation)
- uva 140 - Bandwidth
- UVA - 140 Bandwidth(全排列枚举)
- UVa 140 - Bandwidth
- UVa 140 - Bandwidth(全排列+回溯剪枝)
- UVa - 140 - Bandwidth
- UVa 140 (枚举排列) Bandwidth
- UVA 140——Bandwidth(暴力)
- uva 140 - Bandwidth
- UVa 140 Bandwidth (枚举全排列&剪枝搜索)
- 例题 7-6 UVA - 140 Bandwidth 带宽 (全排列暴力)
- uva140 Bandwidth(排列树+剪枝)
- uva 140 bandwidth (好题) ——yhx
- UVA 140 Bandwidth 暴力模拟
- UVa140 Bandwidth
- UVa 140 - BandWidth (暴力)