图的着色问题

这篇具有很好参考价值的文章主要介绍了图的着色问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题1:
图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
输入格式:
输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。顶点和颜色都从1到V编号。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(≤20),是待检查的颜色分配方案的个数。随后N行,每行顺次给出V个顶点的颜色(第i个数字表示第i个顶点的颜色),数字间以空格分隔。题目保证给定的无向图是合法的(即不存在自回路和重边)。
输出格式:
对每种颜色分配方案,如果是图着色问题的一个解则输出Yes,否则输出No,每句占一行。

问题2:
给定无向连通图和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的两个顶点有不同的颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边相连接的两个顶点着不同颜色,称这个数m为这个图的色数。求一个图的色数m称为图的m可着色优化问题。 给定一个图以及m种颜色,请计算出涂色方案数

问题3:
基于问题2,对问题2进行拓展,输出最少需要的颜色数量;
问题4:
利用回溯法,对给定无向图进行染色;文章来源地址https://www.toymoban.com/news/detail-418804.html

问题1 的实现代码:

#include<iostream>
#include<cstring>
#include <set>
#include <map>
#include <ctime>
#include <bitset>
#include <sstream>
#include <algorithm>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>//getch()的头文件
#include<vector>
#include<queue>
#include<stack>
using namespace std;
//
const int N=510;//二维数组的最大行列数 
int v,e,k,col[N],vis[N],g[N][N];//v为顶点数,e为边数,k为颜色数 
bool dfs(int u ){
   //从某个顶点开始,进行深搜 
	for(int i =1;i<=v;i++){
   //这里每一个顶点都是有顺序的,是递增的 
		if(!vis[i]&&g[u][i]==1){
   //如果没有访问过,而且顶点间是有边的 
			vis[i]=true;//因为是无向图,因此有环,为避免一直递归,应该加一个访问位vis (true==1) 
			if(col[u]==col[i]) return false;//如果两个点的颜色是相同的,直接返回false 
			else return dfs(i);
		} 
	}
	return true;//如果循环遍历完所有的顶点都没有相邻颜色相同的则返回true 
}
int main()
{
   
	memset(g,0x3f,sizeof g);//对数组进行初始化 
	scanf("%d %d %d",&v,&e,&k);//输入顶点数v,边数e,颜色数k 
	for(int i =0;i<e;i++){
   
		int a,b;//a,b都当作是一个顶点了;此代码中N=510,则就有510x510条无向边的可能 
		scanf("%d %d",&a,&b);//输入哪两个顶点,两个顶点的值都设置为1,不过在二位数组中,其图的实际的相对位置并没有体现出来,而是以逻辑关系体现出来的
		//比如无向边 (1,2),和(1,3),其逻辑意义是,它们的交界点是1,也就是顶点1,因此呢,我们的顶点,是可以用一个一维数组来体现的。 
		 
		g[a][b]=g[b][a]=1;//无向边,因此需要两个方向都赋值为1; 
	}
	int n;//这个是输入判断情况的个数 
	scanf("%d",&n);
	for(int i =1;i<=n;i++){
   
		set<int> s;//set的数据唯一,而且自动排序 
		for(int j=1,c;j<=v;j++){
   //从顶点1开始,分别读取各个顶点的颜色 
			scanf("%d",&c);//读取颜色记录在c中 
			col[j]=c;//将c赋值给col数组,值得注意的是,这个数组的每一个下标都是一个顶点 
			s.insert(c)

到了这里,关于图的着色问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构:有向完全图和无向完全图的边数

    一个拥有n个结点的无向完全图的边数为:n×(n−1)÷2 具体的解释: 比如我们有一个拥有4个结点的无向完全图, 我们首尾依次连接,共有4条边。 然后我们选择其他的两条边来连线。 又多出了2条边。一共有4 + 2 = 6条边。 我们来分析一下具体的过程,首先如果为n个结点的话,

    2024年02月11日
    浏览(33)
  • 图的几个基本概念:连通图、强连通图、完全图等

    1、v,w表示v到w的一条弧,v是弧尾、w是弧头 2、 无向 完全图 :任意两个顶点之间都有边,n个顶点有1/2 *n *(n-1)条边; 3、 有向完全图 :任意两个顶点之间都存在方向相反的两条弧  n个顶点有 n *(n-1) 条边 ; 4、 子图 :假设有两个图G=(V,{E})和g=(v,{e}),如果v⊆V,e⊆E,则称

    2024年02月11日
    浏览(30)
  • java agent 实战 监控Elasticsearch(只需依赖一个jar 完全无侵入式)解决jar启动问题

    agent是什么大家应该很熟悉了,今天我们来实战下,效果就是为项目所有elasticsearch请求方法增加耗时告警! 学会Java Agent你能做什么? 自动添加getter/setter方法的工具lombok就使用了这一技术 btrace、Arthas和housemd等动态诊断工具也是用了instrument技术 Intellij idea 的 HotSwap、Jrebel 等也

    2024年02月16日
    浏览(30)
  • [Bijective-proof]完全二分图的生成树个数求解

    题目: 给定完全二分图,左右分别有n1和n2个顶点,求其生成数个数。     知识补充1:完全二分图定义         对某完全图(V,E),将其顶点V划分在两个集合A,B中。取边集E中任意一条边e,若其两个顶点一个在集合A,一个在集合B中,则该完全图为完全二分图。     知识补充

    2024年02月04日
    浏览(30)
  • 记录--Threejs-着色器实现一个水波纹

    hree.js 是一个基于 WebGL 的 JavaScript 3D 库,用于创建和渲染 3D 图形场景。 1、webGL webGL: WebGL 是一种基于 JavaScript API 的图形库,它允许在浏览器中进行高性能的 3D 图形渲染。webGL的渲染依赖于底层 GPU 的渲染能力。 通过获取 canvas 元素获取WebGL的上下文,从而获得WebGL API和GPU。

    2024年02月11日
    浏览(28)
  • 实验4 图的应用问题 给定n个村庄之间的交通图,现计划在n个村庄中选定一个村庄建造一所医院,请设计方案解决问题

    给定n个村庄之间的交通图,现计划在n个村庄中选定一个村庄建造一所医院,请设计方案解决如下问题: (1)求出该医院应建在哪个村庄,才能使距离最远的村庄到医院的路程最短; (2)求出该医院应建在哪个村庄,能使其它所有村庄到医院的路径总和最短。 对于如上所示

    2023年04月25日
    浏览(33)
  • 基于数据结构知识解决地图着色问题

    摘  要 地图着色(map coloring)是一种组合构形,它是对于地图面集的一种 分划 ,分配地图的每一个面一种颜色,使得相邻的面(指有公共边界边)具有不同的颜色,称这样一种色的分配为这个地图的一个着色,或者说,将地图的面集分划为若干个子集,使得每个子集中的任何两面

    2024年02月03日
    浏览(30)
  • 区间图着色问题:贪心算法设计及实现

    在本文中,我们将探讨如何使用贪心算法解决一个特定的资源分配问题,即区间图着色问题。该问题可以描述为将一系列活动分配到最少数量的教室中,其中任意活动都可以在任意教室进行,但两个不兼容的活动不能安排在同一教室。我们将通过构造一个区间图来模拟这一问

    2024年04月27日
    浏览(28)
  • 题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?

    题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少? 完全平方指用一个整数乘以自己例如1×1,2×2,3×3等,依此类推。若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。 完全平方数是非负数 (下面会说到

    2024年02月04日
    浏览(32)
  • git使用某一个分支完全覆盖另一个分支

    比如说使用master分支覆盖dev分支 比如说使用master分支覆盖dev分支 比如说使用master分支覆盖dev分支 如果需要用master分支的代码覆盖到dev分支上,只需要如下操作: 1、切换到dev分支 2、设置本地分支代码的远程为master分支 3、本地代码已覆盖,强制推送本地分支到远程即可 4、

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包