一般图的着色 - [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颜色配置方案 右 ...
随机推荐
- 使用d3.v3插件绘制出svg图
众所周知,这个插件使用的svg技术,而IE8(包括IE8)之前的浏览器是不支持svg的 接下来看代码吧 从后台获取到带id和父id的目录数据[json格式] var module = requestU ...
- CentOS-6.4 安装 Memcached
1.准备文件 cd /usr/src 最新版下载地址 :http://code.google.com/p/memcached/downloads/list wget http://memcached. ...
- VS2013 未找到與約束ContractName...
windows 2008 r2 上面裝的VS2013, 在某一天系統更新之後,再次打開VS項目的時候就出現了上面那個問題 解決方法,打開控制面板,找到下面這個程序,右擊,修復即可
- PostgreSQL分布式架构之——PL/Proxy
1. PL/Proxy的介绍 1.1 PL/Proxy概述 PL/Proxy是一款能在PostgreSQL数据库实现数据库水平拆分的软件:可以理解分布式架构(shared nothing);但是不是真 ...
- 某MDU产品OMCI软件升级加速方案
说明 本文基于某GPON MDU产品的当前情况,提出OMCI升级的加速方案. 因时间仓促和水平限制,文中难免存在错漏和不足之处,敬请指正. 一 问题提出 根据G.988标准相关描述,软件升级过程可分 ...
- 【Python】协程
协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在 ...
- 怎样用SQL语句查看查询的性能指标
一.SET STATISTICS IO (有关TSQL语句查询所产生的磁盘活动量) 扫描计数:在查询中涉及到的表被访问的次数: 逻辑读取:从数据缓冲中读取的数据页数: 物理读取:从物理磁盘中往缓冲读 ...
- LeetCode 43 Multiply Strings(字符串相乘)
题目链接: https://leetcode.com/problems/multiply-strings/?tab=Description 求解大数相乘问题 按照上图所示,进行嵌套循环计算 ...
- LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)
题目链接: https://leetcode.com/problems/divide-two-integers/?tab=Description Problem :不使用乘法,除法,求模计算两个数 ...
- sencha touch 实现安卓toast效果(2013-9-26)
如图中效果,代码很简单.就是利用st的loadmask来实现,可以看看api实现其他效果. /*添加消息提示组件*/ masked: { xtype: 'loadmask', cls: 'messag ...