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. linux压缩、解压缩命令

    tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...

  2. poj3481(splay tree 入门题)

    平衡树都能做. // // main.cpp // splay // // Created by 陈加寿 on 16/3/25. // Copyright © 2016年 chenhuan001. A ...

  3. 【BZOJ4199】[Noi2015]品酒大会 后缀数组+并查集

    [BZOJ4199][Noi2015]品酒大会 题面:http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=2144 题解:听说能用SAM?SA默默 ...

  4. SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 4)

    (五)列表查询中的阈值限制 在之前版本的SharePoint 中,如果在查询的时候没有指定返回数目,那么SharePoint将会查找该列表中所有的条目,这可能会造成在SQL表中需要返回大量的条目,极大 ...

  5. nginx1.4.7+uwsgi+django1.9.2+gridfs 在ubuntu14.0.4上部署

    本文基于root用户安装配置,实现django项目名为trcode sudo apt-get updatesudo apt-get install python-pipsudo apt-get ins ...

  6. Introduction to Mathematical Thinking - Week 9

    错题 评分出错 题目要求的是 "any" ,而答案只给出了一个.所以认为回答者没有理解题意,连 any 都没有理解.所以 0 分. 第一,标准的归纳法只能对自然数使用,而题目要求的 ...

  7. delphi局域网Ping各主机方法及设置本地ip方法

    1. 首先引用winsock单元 function PingHost(HostIP: String): Boolean; type PIPOptionInformation=^TIPOptionInf ...

  8. ehcache 常用配置项详解(三)

    EhCache 给我们提供了丰富的配置来配置缓存的设置: 这里列出一些常见的配置项: cache元素的属性: name:缓存名称 maxElementsInMemory:内存中最大缓存对象数 maxE ...

  9. 斯坦福大学Andrew Ng - 机器学习笔记(4) -- 机器学习算法的选择与评估

    大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...

  10. locust基本使用

    # coding:utf-8 from locust import HttpLocust,TaskSet,task class BlogDemo(TaskSet): '''用户行为:打开我的博客首页d ...