题目描述:
信道分配。好吧我不能理解这个题分配信道判断干扰的机制,总而言之这个题意就是指地图着色了。。。就是希望相邻的两个点不能同色即可。
解题思路:
地图着色。遍历点,将着的颜色记录,并标识邻居不能用该色。遍历完所有点即可。
代码:
#include <stdio.h>
#include <stdlib.h>
#define N 27
int G[N][N], color[N][N];
main()
{
char str[N];
int n,i,j,max,num,count;
scanf("%d",&n);
while(n!=0)
{
memset(G,0,sizeof(G));
memset(color,0,sizeof(color));
for(i=1;i<=n;i++)
{
scanf("%s",str);
j=2;
num=0;
while(str[j]!='\0')
{
num++;
G[i][str[j]-'A'+1] = 1;
j++;
}
G[i][0] = num;
}
max = 0;
for(i=1;i<=n;i++)
{
for(count=1;count<N;count++)//把颜色count分配给点i
if(color[i][count] == 0)
{
color[i][count] = 1;
break;
}
if(count > max)
max = count;
num=0;
for(j=1;j<N && num<G[i][0];j++)//令i的邻居们都不能分配颜色count
{
if(G[i][j]==1)
{
num++;
color[j][count] = 1;
}
}
}
if(max == 1)
printf("%d channel needed.\n",max);
else
printf("%d channels needed.\n",max);
scanf("%d",&n);
}
//system("pause");
return 0;
}