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. X明X源面试题《三》

    本文转自自zhangxh_Doris 昨天(05.23)下午去参加了明源软件的暑期实习宣讲+笔试,第一次听说这个行业,行业和笔试风格完全不一样啊,5道行测智力题+1个问答+ 斐波那契数列 + 洗牌算法 ...

  2. iOS学习笔记(九)—— xml数据解析

    在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...

  3. JQUERY几个操作action,随意记录

    .click:鼠标单击 .mouseenter 鼠标滑动

  4. Vuejs2.0 cnpm 安装脚手架项目模板

    NPM 方法 因为npm 安装速度慢,所以我们可以使用淘宝的镜像cnpm 再安装之前 我们需要先安装nodejs  因为vue框架也是基于nodeljs 下载地址:http://nodejs.cn/d ...

  5. access 如何导出 cvs 文件?

    三部曲 1 access 数据表导出 excel 表格 2 excel 另存为 *.cvs 格式文件 3 数据库导入 *.cvs 文件

  6. 【25】session练习

    #用登录练习session html1为首页,html2为登录页面 def session1(request): uname=request.session.get('myname','请登录') # ...

  7. spring security原理

    spring security通过一系列过滤器实现其功能,入口过滤器如下(web.xml): <filter> <filter-name>springSecurityFilte ...

  8. if控制器+循环控制器+计数器,控制接口分支

    但是我不想这么做,接口只想写一次,让循环控制器和if控制器去判断接口,执行我想要的分支.这里遇到了一个问题,if控制器通过什么去判断接下来的分支?我引入了一个计数器的概念.起始值为0,每次循环加1,将 ...

  9. 通过存储过程运行通过DBLINK的查询语句失败-单个语句成功--ORA-00604

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/q947817003/article/details/24419459 客户遇到个问题,描写叙述例如以 ...

  10. Maven学习笔记—安装和配置

    Maven的安装和配置 1 在windows上安装maven 1.1 下载maven 访问maven的下载页面:http://maven.apache.org/download.cgi,选择版本下载即 ...