图的M着色问题

时间:2023-01-02 22:03:20

问题描述:

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

  四色问题是m图着色问题的一个特例,根据四色原理,证明平面或球面上的任何地图的所有区域都至多可用四种、颜色来着色,并使任何两个有一段公共边界的相邻区域没有相同的颜色。这个问题可将平面图转换成对平面点的着色判定问题,将地图的每个区域变成一个结点,若两个区域相邻,则相应的结点用一条边连接起来。如将五个区域换成用点的方式表示,如下图:

图的M着色问题

即用矩阵的表示如下:

图的M着色问题

 用回溯法解空间,先假设三种颜色和三个点,解空间如下:

图的M着色问题


package com.calculateprogram;
/**
* 图的M上着色问题
* @author 郭庆兴
*
*/
public class NColoring {
static int n, //图的顶点数
m; //可用的颜色数
static boolean [][]a; //图的邻接矩阵,表示点与点之间是否的连接
static int []x; //当前解
static long sum; //当前找到的可着色的方案数 public static long NColoring(int nColor){
m=nColor;
sum=0;
backtrace(1);
return sum;
} private static void backtrace(int i) {
if (i>n) {
//当最后一个点被着色后,此时i大于n,即所有点已染色完成
sum++;
//打印出此种方案的结果
System.out.print("第"+sum+"种方案(点数从1依次到5涂上颜色):");
for (int j = 1; j <= n; j++)
System.out.print(x[j]+" ");
System.out.println();
}
else
//开始给一个点添加颜色,同时判断其可行性,
for (int j = 1; j <= m ; j++) {
//给改点图上m号颜色
x[i]=j;
//若此种颜色可行,即执行进行深层次的着色
if (ok(x[i]))
backtrace(i+1);
//将该点恢复到原来的状态
x[i]=0;
} } private static boolean ok(int i) {
// 检查颜色的可行性
for (int j = 1; j <= n; j++)
if (a[i][j] && (x[j]==x[i]) )
return false; return true; } public static void main(String[] args) {
n=5;
m=4;
x=new int[6];
a=new boolean[6][6];
for (int i = 0; i < a.length; i++)
for (int t = 0; t < a.length; t++)
a[i][t]=false;
a[1][2]=true;a[1][3]=true;a[1][4]=true;
a[2][1]=true;a[2][3]=true;a[2][5]=true;a[2][4]=true;
a[3][1]=true;a[3][2]=true;a[3][4]=true;
a[4][1]=true;a[4][2]=true;a[4][3]=true;a[4][5]=true;
a[5][2]=true;a[5][4]=true;
backtrace(1);
}
}

  程序结果如图:

图的M着色问题

  

图的M着色问题的更多相关文章

  1. 【回溯】图的m着色问题

    问题 C: [回溯]图的m着色问题 时间限制: 1 Sec  内存限制: 128 MB提交: 1  解决: 1[提交][状态][讨论版] 题目描述 给定无向连通图G=(V, E)和m种不同的颜色,用这 ...

  2. 编程之美:1&period;9高效率安排见面会 图的m着色问题 回溯法

    原书问题,可以转换为图的m着色问题 ,下面该问题的代码 这里有参考ppt与code,免积分载 http://download.csdn.net/detail/u011467621/6341195 // ...

  3. &lbrack;题解&rsqb;图的m着色问题

    图的m着色问题(color) [题目描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...

  4. 图的M 着色问题

    题目描述给定无向连通图G 和M 种不同的颜色,用这些颜色为图G 的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G 中每条边的2 个顶点着不同的颜色,则称这个图是M 可着色的.图的M 着色问题是对 ...

  5. P2819 图的m着色问题

    题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问题是对于给定图G和m ...

  6. 图m的着色问题(搜索)

    图的m着色问题 [问题描述]        给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...

  7. 图的m着色问题 (回溯搜索)

    图的m着色问题 [问题描述]        给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...

  8. 算法java实现--回溯法--图的m着色问题

    (转自:http://blog.csdn.net/lican19911221/article/details/26264471) 图的m着色问题的Java实现(回溯法) 具体问题描述以及C/C++实现 ...

  9. 洛谷——P2819 图的m着色问题

    P2819 图的m着色问题 题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的 ...

  10. P2819 图的m着色问题 洛谷

    https://www.luogu.org/problem/show?pid=2819 题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使 ...

随机推荐

  1. UIImage NSData 相互转化

    //UIImage 转为 NSData NSData *imageData = UIImagePNGRepresentation(aImage); //NSData 转为 UIImage UIImag ...

  2. 原来还有这样的记词方法&lowbar;Java版记不规则动词&lowbar;博主推荐

    昨天在看一本英语书的不规则动词的时候,突然产生的灵感:就是想把这样记单词简单方式,用程序代码实现,然后,使用户可以与之进行交互 这样,在用户背不规则动词的时候就会轻松把它给记住.基于这一点,于是我就思 ...

  3. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统 :1&period;技术简介之Mina连接

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 Apache MINA(Multipurpose Infrastructure for Network Applic ...

  4. PHP 关于文件操作的简单介绍

    文件操作一直是Web程序员头疼的地方,而文件操作在CMS这样的系统中又是必须的.如今,PHP文件操作的函数内容已经非常强大,文件这部分也是学习PHP非常重要的一部分,希望大家不要忽略.这篇文章会简单介 ...

  5. spring boot &plus; mybatis &plus; druid

    因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算 ...

  6. notes for python简明学习教程(1)

    print总是以(\n)作为结尾,不换行可以指定一个空 end='' 字符串前面+r, 原始字符串 \ 显示行连接 input()函数以字符串的形式 返回键入的内容 函数参数, 有默认值的形参要放在形 ...

  7. Axure原型设计工具介绍

    Axure原型设计工具介绍 1759230茅杭斌 目录 1.前言 2.下载与激活 3. Axure相关功能介绍 4.Axure案例演示 5.结语 一.前言 在我们进行程序开发的时候,原型图是必不可少的 ...

  8. 062、如何使用flannel host-gw backend(2019-04-02 周二)

    参考https://www.cnblogs.com/CloudMan6/p/7457653.html   flannel 支持多种backend,前面学习的是 vxlan backend ,host- ...

  9. Javascript的DOM总结

    Javascript的DOM总结 DOM DOM 是 W3C(万维网联盟)的标准.DOM 定义了访问 HTML 和 XML 文档的标准: "W3C 文档对象模型(DOM)是中立于平台和语言的 ...

  10. 076 Apache的HBase与cdh的sqoop集成(不建议不同版本之间的集成)

    1.修改sqoop的配资文件 2.从mysql导入到hbase(import) bin/sqoop import \ --connect jdbc:mysql://linux-hadoop3.ibei ...