原本这是离散数学的期末作业,因为对图论比较熟悉,就先看了一下图论题;

引用《离散数学(左孝凌版)》(其实就是我们的离散数学课本……):

用韦尔奇·鲍威尔法对图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法][贪心]的更多相关文章

  1. 图论---图的m-点着色判定问题(回溯法--迭代式)

    转自 图的m着色问题 图的m-着色判定问题——给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色? 图的m-着色优化 ...

  2. 图->存储结构->数组表示法(邻接矩阵)

    文字描述 用两个数组分别存储顶点信息和边/弧信息. 示意图 算法分析 构造一个采用邻接矩阵作存储结构.具有n个顶点和e条边的无向网(图)G的时间复杂度是(n*n + e*n), 其中对邻接矩阵G.ar ...

  3. Obj模型功能完善(物体材质,光照,法线贴图).Cg着色语言+OpenTK+F#实现.

    这篇文章给大家讲Obj模型里一些基本功能的完善,包含Cg着色语言,矩阵转换,光照,多重纹理,法线贴图的运用. 在上篇中,我们用GLSL实现了基本的phong光照,这里用Cg着色语言来实现另一钟Blin ...

  4. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 317  Solved: 11 ...

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

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

  6. 算法:贪心、回溯(su)、分治、动态规划,思想简要

    贪心算法: 只做出当前看来最好的选择,而不从整体考虑最优,他所作出的是局部最优解.使用该算法的前提是必须具备无后效性,即某个状态以前的选择不会影响以后的状态的选择,只与当前状态有关. 回溯算法: 本质 ...

  7. 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)

    数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...

  8. 图论常用算法之一 POJ图论题集【转载】

    POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...

  9. Mapgis地图颜色配置(专题图配置)----对比Arcgis根据属性配置图斑颜色

    对于大多数arcgis用户来说,根据属性配置图斑颜色对于大家来说应该并不陌生.本文将就arcgis图斑颜色设置与mapgis做出比对,为大家提供更为绚丽的地图配色.    Arcgis颜色配置方案 右 ...

随机推荐

  1. TIMEOUT HANDLING WITH HTTPCLIENT

    https://www.thomaslevesque.com/2018/02/25/better-timeout-handling-with-httpclient/ The problem If yo ...

  2. 关联Left Outer Join的第一条记录

    数据准备 CREATE TABLE person (person_id ), lastname )) / INSERT ALL INTO person (person_id, firstname, l ...

  3. Linux下安装中文宋体

    1,#cd /usr/share/fonts/default 2,mkdir -p ./truetype/simsun 3,取得simsun.ttc文件:如果网上下载不到则在windows (c:/w ...

  4. PDF XSS

    漏洞测试: 下面,我们介绍如何把 JavaScript 嵌入到 PDF 文档之中.我使用的是迅捷 PDF 编辑器未注册版本 1.启动迅捷 PDF 编辑器打开一个 PDF 文件,或者使用“创建 PDF ...

  5. bing搜索引擎子域名收集(Python脚本)

    利用bing搜索引擎进行子域名收集,编写了一个简单的Python脚本,分享一下. #! /usr/bin/env python # _*_ coding:utf-8 _*_ import reques ...

  6. KMP算法的实现(Java语言描述)

    标签:it KMP算法是模式匹配专用算法. 它是在已知模式串的next或nextval数组的基础上执行的.如果不知道它们二者之一,就没法使用KMP算法,因此我们需要计算它们. KMP算法由两部分组成: ...

  7. $.format,jquery.format 使用说明

    为jquery添加 format  功能 $.format = function (source, params) { if (arguments.length == 1) return functi ...

  8. 怎么使用jstack精确找到异常代码

    1.代码demo //一个CPU密集型线程的demo: package chapter1; public class FindJavaThreadInTaskManager { public stat ...

  9. Clojure学习之比线性箭头操作

    1. 单箭头( -> ) 单箭头操作符会把其参数form迭代式地依次插入到相邻的下个一个form中作为该form的第一个参数.这就好像把这些form串起来了,即线性化(Threading). 由 ...

  10. sencha touch 在线实战培训 第一期 第八节 (完结)

    2014.1.15晚上8点开的课 这是本期课程的最后一课,下期课程预计在春节后继续. 如果你有什么意见和建议可以将他们发送到邮箱:534502520@qq.com 本期培训一共八节,前三堂免费,后面的 ...