题意:
就是给出一个图,涂色,相邻的点不能涂一样的颜色,问最少涂几种颜色?
分析:
首先数据量很小,可以暴力搜索。刚开始想的是bfs,一层一层的搜,但总写不对。。,好吧,换种思路,一个点一个点的搜吧。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
#define read freopen("q.in","r",stdin)
#define LL long long
#define maxn 1000
using namespace std;
char str[maxn];
int mp[maxn][maxn];
int c[maxn];
int flag,n;
void dfs(int d)
{
int i,j;
if(d==n)return ;
int cont=1;
for(i=1;cont;i++)
{
int f=1;
for(j=0;j<n;j++)
{
if(mp[d][j] && c[j]==i)
{
f=0;
break;
}
}
if(f)
{
c[d]=i;
dfs(d+1);
cont=0;
}
}
}
int main()
{
// read;
int i,j;
while(~scanf("%d",&n) && n)
{
memset(mp,0,sizeof(mp));
memset(c,0,sizeof(c));
for(i=0;i<n;i++)
{
scanf("%s",str);
int a=str[0]-‘A‘;
for(j=2;j<strlen(str);j++)
{
int b=str[j]-‘A‘;
mp[a][b]=mp[b][a]=1;
}
}
c[0]=1;
flag=0;
dfs(0);
int res=0;
for(i=0;i<n;i++)res=max(res,c[i]);
if(res>1)cout<<res<<" channels needed."<<endl;
else cout<<res<<" channel needed."<<endl;
}
}
时间: 2024-10-15 22:34:06