学习链接:算法 图的M着色问题


虽然今早9点才醒来,10点才来教室,但是coding得很高效。吃个早餐,拉个粑粑的时间,就把算法书上的【图的m着色】问题看明白了,大脑里也形成了解决问题的框架。

其实这个问题很简单,也是使用回溯法的解题方案。半局LOL的功夫,就coding完成。经过简单调试后得到了与书上一样的输出。

Java代码:

 import java.util.*;

 public class Main {

     public static void main(String[] args) {
//图的m色 demo
int adjMatrix[][]={
{0,1,1,1,0},
{1,0,1,1,1},
{1,1,0,1,0},
{1,1,1,0,1},
{0,1,0,1,0}
};
M_Color_In_Graph problem=new M_Color_In_Graph(adjMatrix,4);
System.out.print(problem);
int a;
a=0; }
} class M_Color_In_Graph{
int vexnum=0;//顶点数目
int[][] adjMatrix;//邻接矩阵
int m=0;
List<int[]> solved =new ArrayList<int[]>();//解向量组
public String toString(){
int i,j;
String str=new String("");
for(i=0;i<solved.size();i++){
int [] out=solved.get(i);
for(j=0;j<out.length;j++){
str+=out[j];
str+=" ";
}
str+="\n";
}
str+="total="+solved.size();
return str;
}
M_Color_In_Graph(int[][] adj,int m){
adjMatrix=adj;
vexnum=adj.length;
this.m=m;
BackTrace(0,null);
}
void BackTrace(int t,int[] x){//对顶点t进行着色,父结点的解向量为x
if(t<vexnum){
int i,j;
//对x的下标t赋m个值
for(i=0;i<m;i++){
int[] cx=new int[vexnum]; //新建子结点
for(j=0;j<t;j++) cx[j]=x[j];//拷贝父结点
cx[t]=i;
if(contraint(cx,t)) BackTrace(t+1,cx);
}
}else{//着色完毕
solved.add(x);
}
}
boolean contraint(int[] x,int len){//约束函数
//对图进行遍历。如果【所有结点】满足【图中两个结点连通,并且颜色不等】,true。
int i,j;
for(i=0;i<len;i++){
for(j=i+1;j<=len;j++){
if( adjMatrix[i][j]>0 //如果图是连通的
&& x[i]==x[j] ){//但是这两个顶点颜色相同
return false;
}
}
}
return true;
}
}

回溯法 | 图的m着色问题的更多相关文章

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

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

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

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

  3. 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法

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

  4. python 回溯法 子集树模板 系列 —— 10、m着色问题

    问题 图的m-着色判定问题 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化问题 若一个图最少 ...

  5. 图论---图的m-点着色判定问题(回溯法--迭代式)

    转自 图的m着色问题 图的m-着色判定问题——给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化 ...

  6. python 回溯法 子集树模板 系列 —— 8、图的遍历

    问题 一个图: A --> B A --> C B --> C B --> D B --> E C --> A C --> D D --> C E -- ...

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

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

  8. 图的M着色问题

    问题描述: 给定无向连通图 G 和 m 种不同的颜色.用这些颜色为图 G 和各顶点着色,每个顶点着一种颜色.是否有一种着色法使得图 G 中每条边的两个顶点着不同的颜色.这个问题是图的 m 可着色判定问 ...

  9. 『嗨威说』算法设计与分析 - 回溯法思想小结(USACO-cha1-sec1.5 Checker Challenge 八皇后升级版)

    本文索引目录: 一.回溯算法的基本思想以及个人理解 二.“子集和”问题的解空间结构和约束函数 三.一道经典回溯法题点拨升华回溯法思想 四.结对编程情况 一.回溯算法的基本思想以及个人理解: 1.1 基 ...

随机推荐

  1. linux录制终端信息并回放

    我们通常会录制桌面环境视频来作为教程使用,但是视频需要大量的存储空间,而终端脚本文件仅仅是一个文本文件,其文件大小不过是KB级别 1, 开始录制终端会话 [root@VM_0_15_centos ~] ...

  2. hibernate中many-to-one的not-found属性和@notfound注解

    如果在Hibernate项目里面配了很多many-to-one的关联,即使后台在查询数据时已经作了健全性判断,但还是会经常抛出对象找不到异常:org.hibernate.ObjectNotFoundE ...

  3. 【转】.Net程序员学习Linux最简单的方法

    有很多关于Linux的书籍.博客.大多数都会比较“粗暴“的将一大堆的命令塞给读者,从而使很多.NET程序员望而却步.未入其门就路过了. 所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语 ...

  4. 用友U9 刷新当前页面代码

    this.Action.NavigateAction.Refresh(null, true);//刷新当前页

  5. jquery点击放大图片

    参考地址:https://blog.csdn.net/qq_42249896/article/details/86569636 一.应用场景:点击图片可以对图片进行放大显示. 二.实现代码: 说明:我 ...

  6. 【翻译】tus----一个可续传文件上传的开放协议

    tus tus是一个可续穿文件上传协议,它以Http协议为载体,统一了一个文件断点续传的标准. 这篇文章翻译自https://tus.io/ 目前该协议版本信息如下: Version: 1.0.0 ( ...

  7. vue 强制刷新 demo 神器

    this.$forceUpdate() /*关键句,强制更新dom*/

  8. 百度云BCC主机宝镜像

    重装系统 在bcc服务器中,选实例,然后重装系统,镜像选择为主机宝CentOS6.5. 装完后,查看主机宝CentOS6.5官方文档. 登录主机宝管理界面 使用 root 用户登录 SSH 终端执行: ...

  9. 2019国际VR/AR暨3D显示大会内容总结

    一.VR/AR标准化进程           牟同生(浙大) 1.单眼FOV,双眼FOV FOV:又称视场,视角FOV是指镜头所能覆盖的范围(物体超过这个范围就不会被收在镜头内),一般用角度值表示. ...

  10. 点击Button按钮实现页面跳转

    1.首先我们新建一个带有button按钮的页面 <button type="submit" class="form-contrpl">注册</ ...