图着色问题

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

保姆级教程:用Jetson Orin Nano和ROS2 Humble搞定PIXhawk 4飞控通信(含配置文件详解)

本文提供了一份详细的Jetson Orin Nano与PIXhawk 4飞控通信配置指南,涵盖硬件连接、ROS2 Humble环境搭建、MAVROS2配置及通信调试全流程。通过实战案例和配置文件详解,帮助开发者快速实现无人机上位机与飞控的稳定通信,适用于无人机开发与自动化控制场景。

weixin_33670786的博客 475

PTA——图着色问题

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

linjiayina的博客 2563

【移动APP测试】Firebase Test Lab (FTL) 实战指南:从零搭建自动化测试流水线

本文详细介绍了Firebase Test Lab (FTL) 在移动APP测试中的实战应用,从零搭建自动化测试流水线。通过真实设备、虚拟设备和iOS设备的全面覆盖,FTL帮助开发者高效进行兼容性测试、性能监控和崩溃分析,显著提升应用质量。文章还提供了设备选择策略、成本控制技巧和CI/CD集成的最佳实践,助力团队优化测试流程。

weixin_29281915的博客 254

PTA图着色问题

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

Lee's blog 728

俄罗斯方块 C++控制台版

一、创建方块 wstring tetromino[7]; tetromino[0].append(L"..X...X...X...X."); // Tetronimos 4x4 tetromino[1].append(L"..X..XX...X....."); tetromino[2].append(L".....XX..XX....."); tetromino[3].append(L"..X..XX..X......"); tetromino...

一只大鸽子的博客 1625

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

算法如诗的博客 5588

图着色问题 解题报告

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

NCC__dapeng的博客 3413

PHP实现获取当地网络时间​(附完整源码)

PHP实现获取当地网络时间​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 237

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

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

coordinate的博客 4万+

一篇文章带你认识 SpringBoot

文章目录一、原有 Spring 优缺点分析二、SpringBoot 的概述 一、原有 Spring 优缺点分析 (1)Spring 的优点分析 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的 Java 对象(Plain Old Java Object,POJO)实现了EJB的功能。

南淮北安的博客 766

【目标跟踪】多目标跟踪的评价工具motmetrics怎么使用?

多目标跟踪,通过motmetrics测试评价对应的视频。

聿默的博客 5368

回溯法解决图着色问题

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

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

Leads、SDR、MQL、SQL、L2C术语概念,线索创建与清洗、线索分级模型、线索流转策略、线索的统计与分析

CRM中的“Leads”是什么?笔者在文中不仅较为全面地介绍了相关术语概念,还分析了线索的创建与清洗、线索的分级模型、线索流转策略以及线索的统计与分析。

盼盼学士 5960

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

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

盼小辉丶的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【图着色问题】详解优化

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

高高冷的博客 4186

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 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、付费专栏及课程。

余额充值