LevOJ P1795 求解图的m着色问题

问题描述

给定无向连通图 G 和 m 种不同的颜色,用这些颜色为图 G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使 G 中每条边的两个顶点着不同颜色,则称这个图是 m 可着色的。图的 m 着色问题是对于给定图 G 和 m 种颜色,找出所有不同的着色法。

输入描述

第 1 行有 3 个正整数(1≤n≤20)、k 和 (1≤m≤n),表示给定的图 G 有 n 个顶点、k条边、m 种颜色,顶点的编号为 1, 2,…,n 在接下来的 k行中每行有两个正整数 u, v,表示图 G的一条边(u,v)。

输出描述

程序运行结束时将计算出的不同着色方案数输出。

Tip: 不能着色输出 0 即可。

AC代码

#include<iostream>
using namespace std;
int k, v, m;				//v 顶点 k 边数 m 颜色种类
int ans;					//记录最后答案
int col[1010];				//标记每个顶点所图颜色
int graph[1010][1010];		//二维数组存图
bool judge(int p, int color)		//判断p点是否能图该颜色
{
    int i, flag = 1;
    
    //	遍历与p点相邻接的点,如果p点所图颜色与这些点相同,那么p点就不能图这个颜色
    
    for (i = 1; i <= v; i++)
    {
        if (graph[p][i] == 1 && color == col[i])     return false;
    }
    return true;
}
void dfs(int vec)						//深搜,可理解为给vec这点图颜色
{
	//如果当前所图的点的编号大于总共给的点的个数,那么说明此种图色方法可行
    if (vec > v)						
    {
        ans++;
        return;
    }
    int i;
    //遍历所有颜色,并判断是否能图这种颜色
    for (i = 1; i <= m; i++)
    {
        if (judge(vec, i))
        {
            col[vec] = i;
            dfs(vec + 1);
            col[vec] = 0;					//回溯
        }
    }
}
int main()
{
    cin >> v >> k >> m;
    int i;
    for (i = 1; i <= k; i++)
    {
        int x, y;
        cin >> x >> y;
        graph[x][y] = 1;						//注意是无向图
        graph[y][x] = 1;
    }
    dfs(1);										//从顶点1开始图色
    cout << ans << endl;
    return 0;
}

在这里插入图片描述

萌新上路,欢迎指出问题或者提出好的想法

其他已经做完的题目的代码已经上传github,欢迎查看
https://github.com/JZP1112/suan-fa-she-ji-yu-fen-xi.git

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
【资源说明】 基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip基于C++实现的casadi优化求解NMPC源码(带详细注释).zip 基于C++实现的casadi优化求解NMPC源码(带详细注释).zip 基于C++实现的casadi优化求解NMPC源码(带详细注释).zip 基于C++实现的casadi优化求解NMPC源码(带详细注释).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ttzif

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值