回溯法 | 图的m着色问题
学习链接:算法 图的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着色问题的更多相关文章
- 算法java实现--回溯法--图的m着色问题
(转自:http://blog.csdn.net/lican19911221/article/details/26264471) 图的m着色问题的Java实现(回溯法) 具体问题描述以及C/C++实现 ...
- 【回溯】图的m着色问题
问题 C: [回溯]图的m着色问题 时间限制: 1 Sec 内存限制: 128 MB提交: 1 解决: 1[提交][状态][讨论版] 题目描述 给定无向连通图G=(V, E)和m种不同的颜色,用这 ...
- 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法
原书问题,可以转换为图的m着色问题 ,下面该问题的代码 这里有参考ppt与code,免积分载 http://download.csdn.net/detail/u011467621/6341195 // ...
- python 回溯法 子集树模板 系列 —— 10、m着色问题
问题 图的m-着色判定问题 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化问题 若一个图最少 ...
- 图论---图的m-点着色判定问题(回溯法--迭代式)
转自 图的m着色问题 图的m-着色判定问题——给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化 ...
- python 回溯法 子集树模板 系列 —— 8、图的遍历
问题 一个图: A --> B A --> C B --> C B --> D B --> E C --> A C --> D D --> C E -- ...
- 图的m着色问题 (回溯搜索)
图的m着色问题 [问题描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...
- 图的M着色问题
问题描述: 给定无向连通图 G 和 m 种不同的颜色.用这些颜色为图 G 和各顶点着色,每个顶点着一种颜色.是否有一种着色法使得图 G 中每条边的两个顶点着不同的颜色.这个问题是图的 m 可着色判定问 ...
- 『嗨威说』算法设计与分析 - 回溯法思想小结(USACO-cha1-sec1.5 Checker Challenge 八皇后升级版)
本文索引目录: 一.回溯算法的基本思想以及个人理解 二.“子集和”问题的解空间结构和约束函数 三.一道经典回溯法题点拨升华回溯法思想 四.结对编程情况 一.回溯算法的基本思想以及个人理解: 1.1 基 ...
随机推荐
- Vue双向绑定原理(我尽量写的。简洁)
先问自己两个问题: 1.app.message修改数据的时候,Vue内部是如何监听message数据发生改变的 使用Object.defineProperty ->监听对象属性的改变 2.当数据 ...
- SQL -------- 简单的增删改查
sql 结构化查询语言,一种ansi 的标准计算机语言,为了访问数据库 可以做什么:可以对数据库 和表进行创建于删除, 对表里面的数据进行增删改查. 也可以创建存储过程和视图,对表设置权限 RDBM ...
- Create GUID / UUID in JavaScript?
Code function uuidv4() { return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.g ...
- 第九节:EF Core各种迁移指令(CodeFirst和DBFirst)
一. CodeFirst模式指令 1.前提: 必须的程序集: Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.Des ...
- winform子窗口与父窗口的交互-使用委托与事件
实现子窗口与父窗口的交互,通过父窗口调用并控制子窗口,子窗口也能控制父窗口,使用委托和事件的方法,可以实现. 1.父窗口调用子窗口,并通过子窗口控制父窗口 新建工程,创建两个窗体 显示子窗体的代 ...
- C#利用newtonsoft.json读取.so配置文件内容
今天花 了点时间来使用 C#读取json文件 ,文件后缀为 .so文件 ,也是基于文件流的形式 获取 对象 ,然后解析; 之所以尝试 使用 json读取 ,是因为其配置文件的格式 更为友好 和方便,直 ...
- FileReader生成图片dataurl的分析
目录 相关代码及html(来源:百度百科) File API及FileReader简介 结合补充知识进行代码分析 修改尝试: 拖曳图片到网页完成转换 相关代码及html(来源:百度百科) <!D ...
- QT多线程中使用QTcpSocket遇到的读写数据问题
多线程中使用QTcpSocket在run()方法中new QTcpSocket;然后监听readyRead()信号connect(m_pTcpSocket,SIGNAL(readyRead()),th ...
- 12个有趣的C语言问答
转自:http://www.admin10000.com/document/913.html 1,gets() 方法 Q:以下代码有个被隐藏住的问题,你能找到它吗? 1 2 3 4 5 6 7 8 9 ...
- ASP.NET Core 2.2 和之前版本区别: 可以在IIS上进行ASP.NET核心进程托管 (翻译)
原文链接: https://weblog.west-wind.com/posts/2019/Mar/16/ASPNET-Core-Hosting-on-IIS-with-ASPNET-Core-22 ...