问题描述:
给出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