图着色问题

Misra & Gries边着色算法 Misra & Gries边着色算法 边着色问题:给图的每条边制定一种颜色,使得任意两条相邻的边的颜色均不相同 为了解决本次的问题首先需要引入:Misra & Gries边着色算法 Misra & Gries边着色算法是图论算法的一种,能够在多项式内找到任意图的一种边着色方案。这种着色算法最多使用Δ+1\Delta+1Δ+1种颜色,Δ\DeltaΔ是该图节点的最大度数... 阅读详情

偶然遇到了图着色问题,之前也没写过,这里写一下。
示例输入采用的是《离散数学》左孝凌版的图7-6.3,如下图所示:
在这里插入图片描述

输入第一行分别为n、s,n表示结点的个数,s表示边数,然后s行表示了s条边,这里的边为了与离散数学书上的图对应起来,下标从1开始。代码采用书上的Welch Powell方法来对每个点进行着色,每次选取最大度数且与之不邻接的边进行着色。
输入:

8 17
1 2
1 3
1 4
1 7
2 3
2 4
2 5
3 5
3 6
3 7
4 5
4 7
5 6
5 7
5 8
6 8
7 8

输出:

总共需要用3种颜色,各个结点的着色如下
1:1
2:3
3:2
4:2
5:1
6:3
7:3
8:2

代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

struct node
{
    int index, degree = 0;
};

bool cmp(node n1, node n2)
{
    if (n1.degree != n2.degree)
        return n1.degree > n2.degree;
    return n1.index < n2.index;
}

int main()
{
    int n, s, u, v; // n个结点,s条边
    cin >> n >> s;
    vector<node> deg(n + 1);
    for (int i = 1; i <= n; i++)
        deg[i].index = i;
    vector<vector<int>> edge(n + 1, vector<int>(n + 1));
    for (int i = 0; i < s; i++)
    {
        cin >> u >> v;
        edge[u][v] = edge[v][u] = 1;
        ++deg[u].degree;
        ++deg[v].degree;
    }

    vector<bool> visit(n + 1);
    vector<int> colors(n + 1);
    int color = 1; // 此处颜色用数字来表示,同种数字表示同一种颜色
    sort(deg.begin() + 1, deg.end(), cmp);
    for (int i = 1; i <= n; i++)
    {
        int cur = deg[i].index; // 当前度最大结点
        if (visit[cur])
            continue;

        visit[cur] = true;
        colors[cur] = color;
        for (int j = 1; j <= n; ++j)
        {
            if (j != cur && edge[cur][j] == 0) // 两点不邻接
            {
                colors[j] = color;
                visit[j] = true;
            }
        }
        ++color; // 下一个颜色
    }
    cout << "总共需要用" << color - 1 << "种颜色,各个结点的着色如下" << endl;
    for (int i = 1; i <= n; i++)
        cout << i << ":" << colors[i] << endl;
    return 0;
}

如有错误,欢迎指正

图的着色问题 问题1: 图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。 输入格式: 输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。顶点和颜色都从1到V编号。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(≤20 阅读详情

相关推荐

数据结构-图着色问题

7-38 图着色问题 (25 分) 图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。 输入格式: 输入在第一行给出3个整数V(0&lt;V≤500)、E(≥0)和K(0&lt;K≤V),分别是无...

qiulianshaonv_wjm的博客 2476

算法---边界着色

1.既生瑜 何生亮最近在看三国 几年前我也看过几次 但是从来都是看不到多少章就不看了现在有二周了 看了上半部分了感觉有些书。不到一些年纪就是读不进去而且有些精彩的部分 看不懂 但是也不影响看懂的部分的精彩读取一遍能够全部吸收。我觉得至少我认识的人中没有人能做到长篇小说就是需要耐心、不可急躁年轻就是容易急躁也不懂的欣赏一些作品现在我学会去以欣赏的角度问自己:为什么三国可以成为经典?一定有他精彩的地方这个精彩的地方我不想别人告诉我我想自己去看看。

男儿不展风云志,空有天生八尺躯 1415

【图论】【DFS】图着色问题

图着色问题(二分图判定) 给定一个具有n个顶点的图。要给图上的每个顶点染色、并且要使相邻的顶点颜色不同。问是否能最多用2种颜色进行染色?题目保证没有重边和自环。 限制条件:1 <= n <= 1000 把相邻顶点染成不同颜色的问题叫做图着色问题、对图进行染色所需要的最小颜色数称为最小着色数。最小着色数是2的图称作二分图。 解题思想: 如果只用两种颜色给图进行染色,那么确...

lesileqin的博客 4366

图论学习--7 图的着色(思维导图)边着色 点着色 色多项式 临界图与完美图

图的着色 图的边着色 相关概念 正常边着色 对G的边进行染色,相邻边染不同颜色(G不能有自环) 用k种颜色对图G进行正常边着色,则称G是k边可着色的 其实是边集合的一种划分 边色数 对G进行正常边着色的最少颜色数,记为χ‘(G) 色组 相同颜色的边集 π 一种边着色方案 u缺i色 设点u关联的边的着色没有用到色i,则称u缺i色 特殊图的边色数 完全二部图 定理1:χ’(K,m,n)=△ 证明:很显然,因为完全二部图嘛,所以最大度的点必须要有n个颜色(.

或左的博客 1万+

回溯法——图着色问题

图着色问题 “四色问题”一直是数学方面一个重要且困难的问题,直到计算机的发明才得以侧面证明,如何求一个图的着色色数,可以通过回溯法来解决。 问题描述 已知一个图G和m种颜色,在只准使用这m种颜色对G的结点着色的情况下,是否能使图中任何相邻的两个结点都具有不同的颜色呢?这个问题称为m-着色判定问题。可对图G着色的最小正整数m,称为图G的色数。 分析设计 图的表示我们采用二维数组邻接矩阵的形式存储。颜...

Mr.DImple的博客 2968

用VINS-Fusion跑通EuRoC数据集:Ubuntu22.04+ROS2环境下的保姆级评测指南

本文详细介绍了在Ubuntu22.04和ROS2 Humble环境下使用VINS-Fusion处理EuRoC数据集的完整流程。从环境配置、数据集转换到参数调优和性能评估,提供了一套全面的多传感器融合分析方案,帮助开发者在无人机精准定位场景中实现高效部署与优化。

weixin_29212867的博客 517

PTA——图着色问题

PTA——图着色问题 图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。 输入格式: 输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以...

linjiayina的博客 2563

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1462

PTA图着色问题

图着色问题 (25 分) 图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。 输入格式: 输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点...

Lee's blog 728

别再乱选离散化方法了!从零到一用Matlab对比差分、双线性Tustin和预矫正的实战效果

本文深入探讨了Matlab中四种主流离散化方法(差分、双线性Tustin和预矫正)的实战效果对比,帮助工程师在数字控制系统设计中做出明智选择。通过详细的理论分析和Matlab代码示例,展示了不同方法在稳定性、频率响应和计算复杂度上的差异,并提供了针对不同场景的工程选用指南。

weixin_28737603的博客 141

规控面试常见问题

规划控制算法常见问题。

每天进步一点点。 984

图着色问题 解题报告

图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。 输入格式: 输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。顶点和...

NCC__dapeng的博客 3413

基于STM32姿态解算-正点原子ATK-IMU901模块标准库开发——正点原子串口角度传感器模块十轴IMU加速度气压计陀螺仪_资料编号29

购买了正点原子的ATK-IMU901模块后,发现例程给的是HAL库的,本项目将HAL库例程转换为库函数版本(基于STM32)。实战开发,亲测无误。

嵌入式阿齐Archie 3865

图着色问题(超详细!!!)

0x00 图着色问题 图着色问题(Graph Coloring Problem, GCP)又称着色问题,是最著名的NP-完全问题之一。 图的m可着色判定问题 给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。 图的m可着色优化问题 若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数...

coordinate的博客 4万+

【示波器专题】无源探头的常用附件

使用探头进行测试,我们不仅要知道探头的原理,还需要了解探头的常用附件及其使用方式,这样才能在尽可能在测试中提高效率且减少出错的概率

一点硬件 692

JavaFX Stage

JavaFXStagejavafx.stage.Stage表示 JavaFX 桌面应用程序中的窗口。在 JavaFX 内部,Stage您可以插入一个 JavaFX Scene,它表示在窗口内显示的内容 - 在Stage.当 JavaFX 应用程序启动时,它会创建一个根Stage对象,该对象将传递给 start(Stage primaryStage)JavaFX 应用程序的根类的方法。此Stage 对象代表 JavaFX 应用程序的主窗口。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 508

回溯法解决图着色问题

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报所用教材:北京大学屈婉玲教授《算法设计与分析》课程资料:https://www.icourse163.org/course/PKU-1002525003承诺不用于任何商业用途,仅用于学术交流和分享。

泛用演化计算、通用人工智能优化模型 1542

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1391

使用遗传算法解决图着色问题

在图论中,图是对象的结构化集合,用于表示对象对之间的关系。对象在图中表示为顶点(或节点),而一对对象之间的关系使用边表示。图是非常有用的对象,因为它们可以用于表示大量的现实生活中的结构、模式和关系,例如社交网络,电网布局,网站结构,计算机网络,原子结构等等。图着色任务可以简单概括为:为图中的每个节点分配一种颜色,并保证相连接的节点对不会使用相同的颜色,同时,我们希望使用尽可能少的颜色。使用遗传算法解决图着色问题。

盼小辉丶的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【图着色问题】详解优化

图着色问题 【1】 给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。 【2】 若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。 解题思路 【1】 问题分析 第一种是常见的给出一张图,和固定的颜色,让我们判断是否能成功染色或者有几种染色方案; 解题思路 回溯+DFS 用dfs(i)表示对第i个节点染色,当i>n时,即染色完毕; 对于每一个节点,都要去枚举与它相连的所有节点,

高高冷的博客 4186

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: conda install pytorch安装缓慢的解决办法
下一篇: Github使用方法
Slatter
博客等级 码龄8年 105粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值