poj_1129_地图着色?

来源:互联网 发布:淘宝手机端首页模版 编辑:程序博客网 时间:2024/06/05 01:16

题目描述:

  信道分配。好吧我不能理解这个题分配信道判断干扰的机制,总而言之这个题意就是指地图着色了。。。就是希望相邻的两个点不能同色即可。

 

解题思路:

  地图着色。遍历点,将着的颜色记录,并标识邻居不能用该色。遍历完所有点即可。

 

代码:

#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;
}

原创粉丝点击