package main

 import (
"fmt"
) type Graphic struct {
edges [][]int
colors int
color []int
flag int
} func (g *Graphic) check(n int) int {
nodes := len(g.edges[])
for i := ; i < nodes; i++ {
if g.color[i] == g.color[n] && i != n && g.edges[i][n] > {
return
}
}
return
} //递归回溯求解
func (g *Graphic) Recuirse(k int) int {
nodes := len(g.edges[])
if k == nodes { //递归经过最后一个顶点,说明找到了一条着色搜索路径, 返回true
return
} else {
for c := ; c <= g.colors; c++ { //对第k个顶点遍历颜色数着色
g.color[k] = c
if g.check(k) > { //若当前颜色合法, 递归寻找第k+1顶点的着色方案
if g.Recuirse(k + ) > { //如果第i+1及以后的所有顶点着色成功, 反馈给第k-1的递归结果
return
}
}
}
return
}
} //迭代回溯求解
func (g *Graphic) Iterate() int {
i :=
nodes := len(g.edges[])
for i >= { //着色失败, 表明第0个顶点遍历paint了所有颜色数, 都失败, 返回消息给虚顶点“-1"
for g.color[i] <= g.colors { //g.color[i],这里i是变化的, 可以表示下一个顶点, 也可以在下一个顶点着色失败时重新定位到前一个顶点, 重新着色
g.color[i]++
if g.check(i) > && i < nodes { //如果该顶点着色合法, i++进入到下一个顶点的着色过程
i++
}
if i == nodes { //最后一个顶点也着色成功, 跳出双循环, 返回true
return
}
}
//第i个顶点遍历着色了所有颜色数, 都失败(g.color[i] > g.colors),使i--, 对i--的八个顶点进行下一颜色的着色过程
g.color[i] =
i--
}
return
} //打印两种实现方法的着色结果
func (g *Graphic) Paint(c int) {
nodes := len(g.edges[])
g.colors = c
g.color = make([]int, nodes)
fmt.Println("recuirse paint:")
if g.Recuirse() > {
for i := ; i < nodes; i++ {
fmt.Print(g.color[i], "\t")
}
} else {
fmt.Println("so solution to paint")
}
g.color = make([]int, nodes)
fmt.Println("\n iterate paint:")
if g.Iterate() > {
for i := ; i < nodes; i++ {
fmt.Print(g.color[i], "\t")
}
} else {
fmt.Println("so solution to paint")
} } func main() {
g := &Graphic{edges: [][]int{{, , , , }, {, , , , }, {, , , , }, {, , , , }, {, , , , }}}
g.Paint()
}

回溯法之k着色问题的更多相关文章

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

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

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

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

  3. 回溯法 | 图的m着色问题

    学习链接:算法 图的M着色问题 虽然今早9点才醒来,10点才来教室,但是coding得很高效.吃个早餐,拉个粑粑的时间,就把算法书上的[图的m着色]问题看明白了,大脑里也形成了解决问题的框架. 其实这 ...

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

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

  5. 回溯法解决N皇后问题(以四皇后为例)

    以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...

  6. UVa 129 (回溯法) Krypton Factor

    回溯法确实不是很好理解掌握的,学习紫书的代码细细体会. #include <cstdio> ]; int n, L, cnt; int dfs(int cur) { if(cnt++ == ...

  7. 实现n皇后问题(回溯法)

    /*======================================== 功能:实现n皇后问题,这里实现4皇后问题 算法:回溯法 ============================= ...

  8. HDU 1016 Prime Ring Problem (回溯法)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. 从Leetcode的Combination Sum系列谈起回溯法

    在LeetCode上面有一组非常经典的题型--Combination Sum,从1到4.其实就是类似于给定一个数组和一个整数,然后求数组里面哪几个数的组合相加结果为给定的整数.在这个题型系列中,1.2 ...

随机推荐

  1. SQL创建表脚本

    <1>SQL Server设置主键自增长列 SQL Server设置主键自增长列   1.新建一数据表,里面有字段id,将id设为为主键   www.2cto.com   create t ...

  2. hoj 2715 (费用流 拆点)

    http://acm.hit.edu.cn/hoj/problem/view?id=2715 将每个格子 i 拆成两个点 i’, i’’并加边(i’, i’’, 1, -Vi), (i’, i’’, ...

  3. ADB简易安装方法

    ADB安装方法: 1. 下载ADB程序 下载地址: 链接:https://pan.baidu.com/s/1CfQL51pBz-2Wk_cYfJYXUw  提取码:bjp8 2. 配置环境变量 pat ...

  4. 2588: Spoj 10628. Count on a tree

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5766  Solved: 1374 ...

  5. python中静态方法、类方法、属性方法区别

    在python中,静态方法.类方法.属性方法,刚接触对于它们之间的区别确实让人疑惑. 类方法(@classmethod) 是一个函数修饰符,表是该函数是一个类方法 类方法第一个参数是cls,而实例方法 ...

  6. grafana-----Templating

    模板允许更多的互动和动态的仪表板.可以将变量用在度量查询中,不必硬编码诸如服务器.应用程序和传感器名称之类的东西.变量显示在仪表板顶部的下拉式选择框中.这些下拉菜单可以很容易地改变在你的仪表板显示的数 ...

  7. 【转】PowerVM 的主要组成部分及概念

    PowerVM 是在基于 IBM POWER 处理器的硬件平台上提供的具有行业领先水平的虚拟化技术家族.它是 IBM Power System 虚拟化技术全新和统一的品牌(逻辑分区,微分区,Hyper ...

  8. 安装VS2013 2015 需要IE10浏览器 跳过的方法

    安装VS2013 如果浏览器版本较旧的话会提示要求你更新到IE10版本,很麻烦,那么我们如何跳过呢? 复制下面代码粘贴到文本文档里,修改文本txt后缀为bat,右键管理员运行. @ECHO OFF   ...

  9. slf4j和log4j结合使用步骤

    使用slf4j的优点: 提供带参数的日志输出方法(SLF4J 1.7及以后版本). pom中只需引入slf4j-log4j12,然后maven会引入它所依赖的其它JAR包. slf4j和log4j结合 ...

  10. 剑指offer 面试7题

    面试7题: 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...