一般图的着色 - [Welch Powell法][贪心]
原本这是离散数学的期末作业,因为对图论比较熟悉,就先看了一下图论题;
引用《离散数学(左孝凌版)》(其实就是我们的离散数学课本……):
用韦尔奇·鲍威尔法对图G进行着色,其方法是:
a)将图G中的节点按照度数的递减次序进行排列。(这种排列可能并不是唯一的,因为有些点有相同度数。)
b)用第一种颜色对第一点着色,并且按排列次序,对与前面着色点不邻接的每一点着上同样的颜色。
c)用第二种颜色对尚未着色的点重复b),用第三种颜色继续这种做法,直到所有的点全部着上色为止。
然后直接照着码成代码即可:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 25
using namespace std;
bool edge[MAX][MAX];
struct Vertex{
int color,degree;
}vertex[MAX];
int n,m;//n个点,m条边
void calc_degree()//计算每个点的度数
{
for(int i=;i<=n;i++)
{
vertex[i].color=vertex[i].degree=;
for(int j=;j<=n;j++) vertex[i].degree+=edge[i][j];
}
}
bool cmp(Vertex a,Vertex b){return a.degree>b.degree;}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)//输入图的点数和边数
{
memset(edge,,sizeof(edge));//初始化邻接矩阵
for(int i=,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
edge[u][v]=edge[v][u]=;
}
calc_degree();
sort(vertex+,vertex+n+,cmp);
int colored_vertices_cnt=;
int ncolor=;
while(colored_vertices_cnt<n)
{
ncolor++;
for(int i=;i<=n;i++)
{
if(vertex[i].color) continue;
//如果已经着色就跳过 bool ok=;
for(int j=;j<=n;j++)
{
if(!edge[i][j]) continue;
if(vertex[j].color==ncolor)
{
ok=;
break;
}
}
if(!ok) continue;
//如果邻接的点有相同颜色就跳过 vertex[i].color=ncolor;
colored_vertices_cnt++;
printf("vertex[%d]=%d\n",i,vertex[i].color);
}
}
printf("%d\n",ncolor);
}
}
一般图的着色 - [Welch Powell法][贪心]的更多相关文章
- 图论---图的m-点着色判定问题(回溯法--迭代式)
转自 图的m着色问题 图的m-着色判定问题——给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化 ...
- 图->存储结构->数组表示法(邻接矩阵)
文字描述 用两个数组分别存储顶点信息和边/弧信息. 示意图 算法分析 构造一个采用邻接矩阵作存储结构.具有n个顶点和e条边的无向网(图)G的时间复杂度是(n*n + e*n), 其中对邻接矩阵G.ar ...
- Obj模型功能完善(物体材质,光照,法线贴图).Cg着色语言+OpenTK+F#实现.
这篇文章给大家讲Obj模型里一些基本功能的完善,包含Cg着色语言,矩阵转换,光照,多重纹理,法线贴图的运用. 在上篇中,我们用GLSL实现了基本的phong光照,这里用Cg着色语言来实现另一钟Blin ...
- 【BZOJ-1127】KUP 悬线法 + 贪心
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 317 Solved: 11 ...
- 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法
原书问题,可以转换为图的m着色问题 ,下面该问题的代码 这里有参考ppt与code,免积分载 http://download.csdn.net/detail/u011467621/6341195 // ...
- 算法:贪心、回溯(su)、分治、动态规划,思想简要
贪心算法: 只做出当前看来最好的选择,而不从整体考虑最优,他所作出的是局部最优解.使用该算法的前提是必须具备无后效性,即某个状态以前的选择不会影响以后的状态的选择,只与当前状态有关. 回溯算法: 本质 ...
- 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)
数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...
- 图论常用算法之一 POJ图论题集【转载】
POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...
- Mapgis地图颜色配置(专题图配置)----对比Arcgis根据属性配置图斑颜色
对于大多数arcgis用户来说,根据属性配置图斑颜色对于大家来说应该并不陌生.本文将就arcgis图斑颜色设置与mapgis做出比对,为大家提供更为绚丽的地图配色. Arcgis颜色配置方案 右 ...
随机推荐
- 51单片机的idata,xdata,pdata,data的详解(转)
data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. bit :是指0x20-0x2f的可位寻址区idata:固定指前面0x00-0xff的2 ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)
在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时, ...
- 开启mysql远程连接访问权限的几种方法
1.改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...
- 《MySQL》一次MySQL慢查询导致的故障
本文转载自 http://www.jb51.net/article/70955.htm 我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指 ...
- PHP 搜索分词实现代码
<?php /** * @author: xiaojiang 2014-01-08 * php 建立分词树 * */ class Tree{ public $w = ''; public $su ...
- Windows进程间共享内存通信实例
Windows进程间共享内存通信实例 抄抄补补整出来 采用内存映射文件实现WIN32进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在WIN32进程中保 ...
- Matlab 曲线拟合之polyfit与polyval函数
p=polyfit(x,y,n) [p,s]= polyfit(x,y,n) 说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p.x必须是单调的.矩阵s用于生成预测值的误差估 ...
- no matching function for call to ‘std::basic_string<char>::assign(std::string&, int)
使用string中的assign赋值函数报错,代码为: text0.assign(line,i+); 其中text0与line都为string类型 最后发现assign函数的原型为 string &a ...
- PON系统基础知识简介
一 PON基础知识 1.1 PON技术概念 PON(Passive Optical Network)即无源光网络,一种基于点到多点(P2MP)拓朴的技术.“无源”指ODN(光分配网络)不含有任何电子 ...
- spring基础---->spring自定义初始化(一)
这里我们简单的实现一下spring中的初始化bean,以大概了解他的流程.受委屈几乎是一个人成长最快的途径,吃下去的是委屈,消化掉后得到的是格局. spring的自定义初始化 测试的项目结构如下: 一 ...