/*
暴搜
*/
#include <iostream>
using namespace std;
bool G[26][26];
int CL[26] = {0};
int N;
bool dfs(int k, int m)
{
int i, j;
bool flag;
for (i = 0; i < m; i++)
{
for (flag = true, CL[k] = i, j = 0; j < k; j++)
if (G[k][j] && CL[k] == CL[j])
{
flag = false;
break;
}
if (flag && (k == N-1 || dfs(k+1, m)))
return true;
}
return false;
}
int main()
{
int i, j, t;
bool conn;
char str[50];
while (scanf("%d", &N) && N)
{
memset(G, 0, sizeof(G));
for (conn = false, i = 0; i < N; i++)
for (scanf("%s", str), j = 2; str[j]; j++, conn = true)
{
t = str[j] - 'A';
G[i][t] = true;
G[t][i] = true;
}
if (!conn)
printf("1 channel needed.\n");
else if (dfs(1, 2))
printf("2 channels needed.\n");
else if (dfs(1, 3))
printf("3 channels needed.\n");
else
printf("4 channels needed.\n");
}
return 0;
}
暴搜
*/
#include <iostream>
using namespace std;
bool G[26][26];
int CL[26] = {0};
int N;
bool dfs(int k, int m)
{
int i, j;
bool flag;
for (i = 0; i < m; i++)
{
for (flag = true, CL[k] = i, j = 0; j < k; j++)
if (G[k][j] && CL[k] == CL[j])
{
flag = false;
break;
}
if (flag && (k == N-1 || dfs(k+1, m)))
return true;
}
return false;
}
int main()
{
int i, j, t;
bool conn;
char str[50];
while (scanf("%d", &N) && N)
{
memset(G, 0, sizeof(G));
for (conn = false, i = 0; i < N; i++)
for (scanf("%s", str), j = 2; str[j]; j++, conn = true)
{
t = str[j] - 'A';
G[i][t] = true;
G[t][i] = true;
}
if (!conn)
printf("1 channel needed.\n");
else if (dfs(1, 2))
printf("2 channels needed.\n");
else if (dfs(1, 3))
printf("3 channels needed.\n");
else
printf("4 channels needed.\n");
}
return 0;
}
浙公网安备 33010602011771号