首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

回顾算法-四色图着色

2012-07-19 
回溯算法---四色图着色 回溯算法基本思想:判断第一个节点的各个候选{ //当无未进行判断的候选者时,则退出

回溯算法---四色图着色

 

回溯算法基本思想:

 

           判断第一个节点的各个候选值{ //当无未进行判断的候选者时,则退出

           当将某候选值赋予第一个节点时,判断此时是否存在一个解路径。

           若不存在,则继续判断下一个候选值。

 

}

         

 具体算法思想如下:

 

 

NUM :  解路径上节点的个数

CANDIDATA_NUM: 每个节点的候选值的个数

 

BOOL TestNode(I,j)

判断当将候选值j赋予节点i时,是否能找到一条解路径

 

 

//是否有解

BOOL Find()

{

   BOOL bExist=FALSE;

   //从起始节点的候选值依次判断

   For(int j=0; j<CANDIDATA_NUM;j++)

   {

       IF(TestNode(0,j))

       {

         bExist=True;

       }

      

}

 

  Return bExist;

}

 

        

 

四色图问题:

       设有下图所示地图,每个区域代表一个省,区域中的数字代表省的编号,今将每个省涂上红(R),兰(B),黄(Y),绿(G)四种颜色之一,使相邻的省份有不同的颜色。

 

回顾算法-四色图着色

 

算法说明:

      这是一道非常典型的回溯题目。解法与“八皇后问题”一样。在填写每一个省的颜色时检查与相邻已填省份的颜色是否相同。如果不同,则填上;如果相同(冲突),则另选一种;如果已没有颜色可供选择,则回溯到上一省份。重复这一过程,直到所有省的颜色都已填上。

       最主要的问题在于如何解决相邻省的颜色冲突。对每一个省份,可供选择的颜色一共有四种;对省份i来说颜色x可填的条件是编号为1~(i-1)且与省i相邻的省份的颜色都不是x。

 

各省之间的相邻关系用矩阵R(n,n)来表示:

       r(i,j)=1或0          1:表示相邻 0表示不相邻

      本题的相邻矩阵如下:   

0

1

0

0

0

0

1

1

0

1

1

1

1

1

0

1

0

1

0

0

0

1

1

1

0

1

0

0

0

1

0

1

0

1

0

0

1

0

0

1

0

1

1

1

0

0

0

1

0

 

 

 

主要函数:

 


 


 

经测试,此图共有192中着色方案, 示例如下:

回顾算法-四色图着色

 

回顾算法-四色图着色

 

回顾算法-四色图着色

 

 

 

 测试程序:

http://download.csdn.net/detail/shuilan0066/4406160

 

 

热点排行