`
李亦鸿
  • 浏览: 11755 次
  • 性别: Icon_minigender_1
  • 来自: 海南
社区版块
存档分类
最新评论
  • baiyj71: quiz的例子因为浏览器版本的问题会出现报错,需要在smoke ...
    smoke.js

回溯法求图的m着色问题

阅读更多

 

 

 

问题描述:给定无向图G和m种不同的颜色,用这些颜色为图G的各个点着色,每个顶点着一种颜色。是否有一种着色发使G中的每条边的两个顶点着不同种颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中的每一条边连接的两个顶点着不同种颜色,则称这个数m为该图的色数。图的色数m的问题称为图的m可着色优化问题。

 

 



 解题思路:有序地从顶点1着1号颜色开始,然后再试着顶点2的第几号颜色,如果顶点2也满足条件,那么继续着顶点3的颜色,如果此时顶点3没有可着的颜色,说明目前为止的尝试是无效的(不可能得到最终的解),那么此时应该回溯的上一顶点(即顶点2),将上一顶点着的颜色该着另一种符合要求的颜色..........如此尝试性地搜索加回溯,最后得到符合要求的解。

 

 

package 算法实验;
/**
 * 图的m着色类
 *回溯法求图的m着色问题
 */
public class mColoring {
	//定义变量和数组
	static int m,n;//m为颜色种数,n表示n个区域
	static int []x;//x[k]表示第k号区域的第x[k]号颜色
	static int [][]a;//用来存储图的邻接矩阵
    /**
     * 如何着色的方法
     */
     public void coloring(){
    	 x[1]=0;//每号区域从0号颜色开始
    	int k=1;//从1号区域开始
    	 while(k>0){
    	  x[k]=x[k]+1; 
    	  while((x[k]<=m)&&!(restrain(k)))//约束条件判断
    		  x[k]+=1;
    	  if(x[k]<=m)
    		  if(k==n){
    			  //输出各个区域着的颜色
    			  for(int i=1;i<=n;i++)
    			  System.out.println(+i+"号区域着"+x[i]+"号颜色;");
    			  System.out.println();
    		  }
    		  else {
    			  k++;
    			  x[k]=0;
    		  }
    	  else
    		  k--;//回溯
    	 }
     }
     /**
      * 约束条件的判断方法
      * @param k
      * @return
      */
     public boolean restrain(int k){
    	 for(int j=1;j<=k;j++)
    		 if((a[k][j]==1)&&(x[j]==x[k]))//相邻区域不能着同种颜色
    			 return false;
    	 return true;
     }
     /**
      * 程序入口,主函数
      * @param args
      */
   public static void main(String[] args){
	   m=4;n=5;//给m,n赋初始值
	   x = new int[n+1];//定义数组长度
	   //二维数组用来存储图的邻接矩阵
	   a=new int[][]{
				{0,0,0,0,0,0},//0表示两号区域之间不相邻
				{0,0,1,1,1,0},//1表示两号区域之间相邻
				{0,1,0,1,1,1},
				{0,1,1,0,1,0},
				{0,1,1,1,0,1},
				{0,0,1,0,1,0}
			};
	   mColoring mc = new mColoring();//实例化对象
	   System.out.println("各个点着的颜色是:");
	   mc.coloring();//调用着色方法
   }
     
}

 运行结果:

 

1号区域着4号颜色;
2号区域着3号颜色;
3号区域着1号颜色;
4号区域着2号颜色;
5号区域着1号颜色;

 

1号区域着4号颜色;
2号区域着3号颜色;
3号区域着1号颜色;
4号区域着2号颜色;
5号区域着4号颜色;

 

1号区域着4号颜色;
2号区域着3号颜色;
3号区域着2号颜色;
4号区域着1号颜色;
5号区域着2号颜色;

 

1号区域着4号颜色;
2号区域着3号颜色;
3号区域着2号颜色;
4号区域着1号颜色;
5号区域着4号颜色;

  • 大小: 15.7 KB
分享到:
评论

相关推荐

    图的m着色问题 回溯法

    图的着色问题是一个...总的来说,图的m着色问题利用回溯法可以有效地找出满足条件的着色方案,这需要对图论和回溯算法有扎实的理解。实际编程时,需要注意处理好回溯过程中的状态恢复和剪枝策略,以提高算法的效率。

    C语言图的着色问题回溯法

    在提供的文档`图m着色.docx`和`图的着色问题`中,可能包含了详细的代码示例和进一步的解释。这些文档可以作为学习和理解如何在C语言中应用回溯法解决图的着色问题的参考。 总的来说,图的着色问题是图论中的一个...

    c++实现回溯算法解决图的m着色问题

    c++实现回溯算法解决图的m着色问题 开发环境:eclipse+mingw 压缩工具:快压。

    m着色问题(回溯法)

    通过阅读和分析这段代码,你可以更深入地了解回溯法在解决m着色问题中的具体应用,包括如何表示图、如何定义回溯过程以及如何剪枝等细节。 总的来说,m着色问题是一个典型的图论问题,回溯法提供了一种有效的解决...

    着色问题的回溯解法(C语言)

    int color::ok(int k) {//检查颜色可用性 for(int j=1;j;j++) if ((a[k][j]==1)&&(x[j]==x[k])) return 0; return 1; } void color::backtrack(int...i&lt;=m;i++){ x[t]=i; if(ok(t)) backtrack(t+1); } }

    Java实现图的m着色问题算法

    这是一个用Java实现图的m着色问题的算法

    图的着色问题-回溯法-子集树

    本例采用了java编写的图的m着色问题,采用的回溯法,参考:算法设计与分析

    回溯法思想和案例(旅行售货员问题,装载问题, 0-1背包问题,图的m着色问题).zip

    回溯法是一种重要的算法策略,常用于解决组合优化问题,如旅行售货员问题、装载问题、0-1背包问题以及图的m着色问题。这些问题是计算机科学中经典的NP完全问题,通常没有多项式时间的精确解决方案。下面将详细阐述...

    C语言使用回溯法解旅行售货员问题与图的m着色问题

    数学模型为给定一个无向图,求遍历每一个顶点一次且仅一次的一条回路,最后回到起点的最小花费。 2.输入要求: 输入的第一行为测试样例的个数T( T &lt; 120 ),接下来有T个测试样例。每个测试样例的第一行是无向图...

    试设计一个用回溯法搜索一般解空间的函数

    该函数的参数包括:生成解空间中下一扩展结点的函数、结点可行性判定函数和上界函数等必要的函数,并将此函数用于解图的m着色问题。 图的m 着色问题描述如下:给定无向连通图G 和m 种不同的颜色。用这些颜色为图G的...

    图的m着色问题回溯法及其优化策略实现python源码下载

    图的m着色问题,包含朴素回溯法,前向检查,智能回溯,值排序MRV等策略。demo已经通过测试验证

    图的m着色问题回溯法及其优化策略实现C++源码下载

    图的m着色问题C++源码下载,包含回溯法及其优化,项目已经过莱顿图和随机地图的测试。版权所有,代码进供参考,不作其他用途。

    算法分析之回溯法算法框架课件

    在实际应用中,回溯法常用于解决组合优化问题,如 0-1 背包问题、装载问题、n 皇后问题、图的 m 着色问题等。同时,回溯法也可以用于解决一些特殊的搜索问题,如迷宫搜索问题、迷宫游戏问题等。 该课件为学习回溯法...

    山东科技大学算法设计与分析实验8:图的m着色问题 源.cpp+报告

    全都是自己写的,都能跑出来 实打实写的哦~ 仅供参考 最重要的还是自己理解 1. 掌握回溯法的基本思想和解决...2.能够用回溯法的思想解决图的m着色问题。 3. 认识回溯法和动态规划、贪心选择的联系与区别 预览地址:

    算法导论作业 图的m着色问题

    总之,图的m着色问题是一个典型的图算法问题,它涉及到回溯法、深度优先搜索、剪枝策略以及图数据结构的理解和操作。通过解决这个问题,我们可以加深对图算法和搜索策略的理解,提高问题解决能力。

    Python基于回溯法子集树模板解决m着色问题示例

    m着色问题是一个经典的图论问题,它涉及为图中的每个顶点分配一种颜色,使得相邻的顶点颜色互不相同。在Python中,我们可以利用回溯法来解决这类问题。回溯法是一种通过尝试所有可能的解决方案并逐步构建潜在解的...

    图的m着色问题算法伪代码

    本文将详细介绍图的m着色问题的算法伪代码,包括朴素回溯法以及一系列优化策略,如最小剩余值(MRV)、最大团值(MCV)、前向检查和智能回溯等。 **一、朴素回溯法** 朴素回溯法是一种基础的解决问题的方法,适用...

    算法设计 回溯法

    经典算法 回溯法。学习算法,必定知道。5.1 回溯法算法框架 5.2 装载问题 5.3 批处理作业调度 5.4 符号三角形问题 5.5 n后问题 5.6 0-1背包问题 5.8 图的m着色问题 5.9 旅行售货员问题

    计算机软件及应用算法分析回溯法PPT课件.pptx

    回溯法的应用非常广泛,包括0-1背包问题、旅行售货员问题、圆排列问题、图的m着色问题等。这些问题都可以使用回溯法来解决,找到满足问题约束条件的最优解。 在学习回溯法时,需要掌握回溯法的算法框架、回溯法的...

Global site tag (gtag.js) - Google Analytics