c解决图的涂色问题

问题描述:

给出5个顶点的无向连通图的四着色问题。

思路:和八皇后问题雷同,用回溯法逐步试探。先给任一个节点涂色,然后为相邻节点涂色,涂色时逐步试探使得不撞色。


代码如下:


#include <stdio.h>
void  visit(int g[],int n);
int canDraw(int c[][6],int n, int g[], int k)
{
	int i = 1,flag = 1;//flag初始值为0的话,如果k=1,即给第一个节点涂色,下面的for循环都不满足,直接返回flag,为假,这就错了。 
	for(; i < k; i++)//涂第k个节点时,只要前k-1个已经涂好的节点如果有与这个节点相连颜色不同即可 
	{
		if(c[i][k])
		{
			if(g[i] != g[k]) 
		         flag++;
			else
			{
				 flag = 0;
			 	break;
		    }
	    }
	}
	return flag;
} 

int drawColor(int c[][6], int n, int g[])
{
	int k = 2,find = 0,count = 0, m = 4;

	g[1] = 1;//红橙黄绿用1234表示。初始节点(用1表示)涂红色。 
	find = 1; 
	while(k >= 1)//当k回退到k=0,跳出循环。如果k>=0,则最后一次回退k=0,又从g
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值