#include<bits/stdc++.h>
using namespace std;
bool b[26],a[26][26];
int n,ans,s[26],c[26],anss[26];
void dfs(int x){
int i,j;
if(x>n){
int m=0;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[s[i]][s[j]])
m=max(m,j-i);
if(m<ans){
for(i=1;i<=n;i++)
anss[i]=s[i];
ans=m;
}
return;
}
if(x==1)
for(i=1;i<=n;i++){
s[1]=c[i];
dfs(x+1);
}
else for(i=1;i<=n;i++){
bool ok=1;
for(j=1;j<x;j++){
if(s[j]==c[i]){
ok=0;
break;
}
if(a[s[j]][c[i]]&&x-j>ans){
ok=0;
break;
}
}
if(ok){
s[x]=c[i];
dfs(x+1);
}
}
}
int main(){
char c1,c2;
while(1){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
n=0;
scanf("%c",&c1);
if(c1=='#')break;
scanf(":");
c1-='A';
b[c1]=1;
while(1){
scanf("%c",&c2);
if(c2==';')break;
c2-='A';
a[c1][c2]=1;
a[c2][c1]=1;
b[c2]=1;
}
while(1){
scanf("%c:",&c1);
c1-='A';
b[c1]=1;
while(1){
scanf("%c",&c2);
if(c2==';'||c2=='\n')break;
c2-='A';
a[c1][c2]=1;
a[c2][c1]=1;
b[c2]=1;
}
if(c2=='\n')break;
}
for(int i=0;i<26;i++)
if(b[i])c[++n]=i;
ans=1e9;
dfs(1);
for(int i=1;i<=n;i++)
printf("%c ",anss[i]+'A');
printf("-> %d\n",ans);
}
return 0;
}
UVA 140 Bandwidth
最新推荐文章于 2023-10-28 00:23:01 发布