图的m着色问题
【问题描述】
       给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的。图的m着色问题是对于给定图G和m种颜色,找出所有不同的着色法。
【编程任务】
       对于给定的无向连通图G和m种不同的颜色,编程计算图的所有不同的着色法。
【输入格式】
       文件color.in输入数据。第1行有3个正整数n,k 和m,表示给定的图G有n个顶点和k条边,m种颜色。顶点编号为1,2,…,n。接下来的k行中,每行有2个正整数u,v,表示图G 的一条边(u,v)。
【输出格式】
       程序运行结束时,将计算出的不同的着色方案数输出到文件color.out中。
【输入样例】
5 8 4
1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5
【输出样例】
48
在搜索的思维混乱了,加入search(1)是从第一个开始涂得意思,里面的的情况只是循环1-m种颜色,而我错误理解为开始涂得第一个有1-n个节点可以选择,
每个节点还有1-m个颜色可以选,然后我就炸了....然后上网上搜了一下。。orz
好了 说一下思路 每涂一个节点面临的情况都是涂一个和它前面后面都不样的颜色,所以要判断一下。
【代码】

#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int n,k,m,sum;
int search(int);
bool paint[];
int pic[][],node[];
bool pd(int,int);
int main()
{
int x,y;
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=k;i++)
{ scanf("%d%d",&x,&y);
pic[x][y]=pic[y][x]=;//相连
}
search();
printf("%d",sum);
return ;
}
int search(int x)//他的情况不是能涂哪个节点,因为我们就是从第一个开始涂色的,而是有m个颜色可涂;
{
if(x>n)sum++;
else
for(int i=;i<=m;i++)//每一个有1-m种情况可以涂
{
if(pd(x,i))//第x个涂第i种颜色
{
node[x]=i;//第x个涂第i个颜色,这里记录的原因是为判断一个点和他相邻的点是否一个颜色
search(x+);
node[x]=;//回溯
}
}
}
bool pd(int x,int j)//判断
{
for(int i=;i<=n;i++)
{
if(pic[x][i]&&node[i]==j)//如果与它相连并且与它将要涂的颜色一样
return ;//返回假
}
return ;//否则真
}

图m的着色问题(搜索)的更多相关文章

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

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

  2. 图的M 着色问题

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

  3. P2819 图的m着色问题

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

  4. 洛谷 P2819 图的m着色问题

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

  5. 【题解】图的m着色问题

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

  6. (Java实现) 图的m着色问题

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

  7. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

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

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

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

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

随机推荐

  1. Yii2 注册表单验证规则 手机注册时候使用短信验证码

    public function rules() { return [ ['username', 'filter', 'filter' => 'trim'], ['username', 'requ ...

  2. PHP的异常处理、错误的抛出及错误回调函数

    一.错误.异常和等级常量表 error:不能再编译期发现运行期的错误,不如试图echo输出一个未赋值的变量,这类问题往往导致程序或逻辑无法继续下去而需要中断. exception:程序执行过程中出现意 ...

  3. class_alias--为一个类创建别名

    class_alias--为一个类创建别名 bool class_alias ( string $original , string $alias [, bool $autoload = TRUE ] ...

  4. 20145240 《Java程序设计》第五次实验报告

    20145240 <Java程序设计>第五次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.05.06 实验 ...

  5. 20145240《Java程序设计》第三周学习总结

    20145240 <Java程序设计>第三周学习总结 教材学习内容总结 个人感觉第三周的学习量还是很大的,需要学习的内容更难了而且量也变多了,所以投入了更多的时间到Java的学习中去. 第 ...

  6. INSPIRED启示录 读书笔记 - 第1章 关键角色及其职责

    现代软件产品团队 1.产品经理的主要职责分为两项:评估产品机会和定义要开发的产品 2.用户体验设计师(由多种角色组成,这里面最关键的是交互设计师)      交互设计师负责深入理解目标用户,设计有价值 ...

  7. Go Redis 开发

    redigo库来实现redis的操作:https://github.com/gomodule/redigo Redis常用操作 示例代码: package main import ( "gi ...

  8. vijos 1250 最勇敢的机器人 分组背包+并查集

    P1250最勇敢的机器人 背景 Wind设计了很多机器人.但是它们都认为自己是最强的,于是,一场比赛开始了~ 描述 机器人们都想知道谁是最勇敢的,于是它们比赛搬运一些物品. 它们到了一个仓库,里面有n ...

  9. Mac上的抓包工具Charles[转载]

    今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用Fidder进行抓包 http://blog.csdn.net/jiangwei0910410003/article/details/198 ...

  10. JavaScript 编程模式

    编程模式,是源自经验和探索总结出的最佳实践方案,既有助于可读性和可维护性,也有助于提升整体性能. 行为隔离 总则:结构.样式和行为之间两两隔离. 避免在结构中使用内联事件 尽量少用 <scrip ...