poj_1129_地图着色?

题目描述:

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

 

解题思路:

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

 

代码:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值