Advertisement

c用于涂色图的问题

阅读量:

问题描述:

针对包含五个顶点的无向连通图,探讨其四着色的相关问题。

思路:该问题与八皇后问题存在相似之处,同样可以采用回溯法进行逐步尝试。首先为任意一个顶点赋予颜色,随后依次为与其相邻的顶点进行染色,在此过程中不断尝试不同的颜色组合以确保相邻顶点的颜色不重复。

代码如下:

复制代码
    #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;
    }

全部评论 (0)

还没有任何评论哟~