码迷,mamicode.com
首页 > 其他好文 > 详细

search1129

时间:2014-10-08 14:18:25      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   sp   div   c   

一个有N个节点的无向图,要求对每个节点进行染色,使得相邻两个节点颜色都不同,问最少需要多少种颜色?

 

暴力法自己通过的:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

bool map[30][30];
int cmpmax(int a,int b)
{
	return a>b;
}

int main()
{
	char str[33];
	int i,j,num,color_number;
	int color[33];

	while(scanf("%d",&num),num)
	{
		memset(map,0,sizeof(map));
		memset(color,0,sizeof(color));
		color_number=1;
		

		for(i=1;i<=num;i++)
		{
			scanf("%s",str);
			for(j=2;j<=strlen(str)-1;j++)
				map[i][str[j]-‘A‘+1]=1;
		}
		
		color[1]=1;
	    int	cur_color=1;
		bool ok;
		for(i=2;i<=num;i++)
		{
			cur_color=1;//对每个节点从第一个颜色开始试,直至成功

			ok=0;
			while(!ok)
			{
				color[i]=cur_color++;
				
				for(j=1;j<=num;j++)
				{
					if(map[i][j]==1 && color[i]==color[j])
						break;
				}

				if(j==num+1)
					ok=1;
			}
		}

		sort(color+1,color+30,cmpmax);
		if (color[1] == 1)
            printf("1 channel needed.\n");
        else
            printf("%d channels needed.\n", color[1]);
	}
	return 1;
}

  

search1129

标签:style   blog   color   io   ar   for   sp   div   c   

原文地址:http://www.cnblogs.com/notlate/p/4010775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!