#include <cstdio> #include <cstring> int T,grid[30][30],color[30],ret[30]; void dfs(int x) { int c[30]={0},i; for (i=0;i<T;i++) if (grid[x][i]) c[color[i]] = 1; for (i=1;i<=T;i++) if (!c[i]) { color[x] = i; if (!ret[i]) ret[i] = 1; break; } for (i=0;i<T;i++) if (!color[i]) dfs(i); return; } int main() { char rela[30]; int len,i,j; while (scanf("%d", &T) && T) { memset(grid,0,sizeof (grid)); memset(color,0,sizeof (color)); memset(ret,0,sizeof (ret)); for (i=0;i<T;i++) { scanf("%s",rela); len=strlen(rela); for (j=2;j<len;j++) grid[i][rela[j]-‘A‘] = 1; } dfs(0); int sum=0; for (i=1;i<=T;i++) if (ret[i]) sum++; printf("%d",sum); if (sum==1) printf(" channel needed.\n"); else printf(" channels needed.\n"); } return 0; }
原文:http://www.cnblogs.com/You-Change/p/3527356.html