水题,虽然归在搜索里面,其实不算搜索类,可以直接套循环过
代码如下:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n,ans;
int dis[30][30];
int channel[30];
void dfs(int x){
int vis[30]={0};
for(int i=1;i<x;++i){
if(dis[x][i]){
vis[channel[i]]=1;
}
}
for(int i=1;i<=x;++i){
if(!vis[i]){
channel[x]=i;
break;
}
}
ans=max(ans,channel[x]);
if(x==n)
return;
dfs(x+1);
return;
}
int main(){
while(scanf("%d",&n)&&n){
memset(dis,0,sizeof dis);ans=0;
char s[30];
for(int i=1;i<=n;++i){
scanf("%s",s);
if(strlen(s)>2){
for(int j=2;j<strlen(s);++j){
dis[i][s[j]-'A'+1]=1;
}
}
}
channel[1]=1;
dfs(1);
if(ans==1){
printf("%d channel needed.\n",ans);
}
else
printf("%d channels needed.\n",ans);
}
return 0;
}