1 简单描述
用中继器接收信号,相邻的中继器不互相干扰。如果相邻的中继器使用不同的频道,那么就不会相互干扰。使用的中继频道数尽量减少。
2 思路
#include <map>
#include <cmath>
#include <queue>
#include <stack>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF =0x3f3f3f3f;
const int Max =120;
typedef pair <int ,int >p;
bool Map[30][30];
int colour[30];
bool vis[30];
int n,m;
int main()
{
char s,c;
char str[30];
int MM;
while(scanf("%d",&n)&&n)
{
memset(Map,false,sizeof(Map));
for(int i=0;i<n;i++)
{
scanf("%c%c%s",&s,&c,str);
for(int j=0;str[j];j++)
{
Map[i][str[j]-'A']=true;
}
}
memset(colour,-1,sizeof(colour));
MM=-1;
for(int i=0;i<n;i++)
{
colour[i]=n+1;
memset(vis,false,sizeof(vis));
for(int j=0;j<n;j++)
{
if(Map[i][j]&&colour[j]!=-1)
{
vis[colour[j]]=true;
}
}
for(int j=1;j<=n;j++)
{
if(!vis[j])
{
colour[i]=j;
break;
}
}
if(MM<colour[i])
{
MM=colour[i];
}
}
if(MM==1)
{
printf("1 channel needed.\n");
}
else
{
cout<<MM<<" channels needed."<<endl;
}
}
return 0;
}
表达无奈,刚开始没思路搜了一下题解,试一下能否通过,在codeblocks上显示编译错误,我以为我的codeblocks坏了,提交了一遍题解,也是编译错误。查了一下,说是什么半月角空格啥的问题,并不是很懂,这只说明了直接复制是要出事情的。
对于每个节点记录它所连得节点,赋给这个节点和它相连的节点没有的颜色并且是最小的