华为OD机试 - 无向图染色(Java 2024 E卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给一个无向图Q 染色,可以填红黑两种颜色,必须保证相邻的两个节点不能同时为红色,输出有多少种不同的染色方案?

二、输入描述

第一行输入M(图中节点数) N(边数)

后续N行格式为:V1 V2表示一个V1到V2的边。

数据范围:1 <= M <= 15, 0 <= N <= M * 3, 不能保证所有节点都是连通的。

三、输出描述

输出一个数字表示Q染色方案的个数。

说明

0 < n <= 15
0 <= N <= M * 3
0 <= s, t < n

不保证图连通

保证没有重复边和自环

四、测试用例

测试用例1:

1、输入

4 4
1 2
2 4
3 4
1 3

2、输出

7

3、说明

4个节点,4条边,1号节点和2号节点相连,
2号节点和4号节点相连,3号节点和4号节点相连,
1号节点和3号节点相连,
若想必须保证相邻两个节点不能同时为红色,总共7种方案。

测试用例2:

1、输入

3 3
1 2
1 3
2 3

2、输出

4

3、说明

3个节点,3条边。所有满足条件的染色方案共有4种。

五、解题思路

  1. 邻接表的构建:使用邻接表表示无向图,每个节点存储其相邻节点的列表。
  2. 回溯算法:通过回溯遍历所有可能的染色方案。对于每个节点,有两种选择:染为黑色或红色。
  3. 染为黑色:无需检查相邻节点,直接递归处理下一个节点。
  4. 染为红色:需要检查所有相邻节点是否已经染为红色。如果没有相邻节点染红,则可以染红,并继续递归处理下一个节点。
  5. 计数:每当所有节点都被处理完毕且满足条件时,计数加一。

六、Java算法源码

public class OdTest {
    private static int M; // 节点数
    private static int N; // 边数
    private static List<Integer>[] adj; // 邻接表
    private static int count = 0; // 有效染色方案计数

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取节点数M和边数N
        M = scanner.nextInt();
        N = scanner.nextInt();

        // 初始化邻接表
        adj = new ArrayList[M];
        for (int i = 0; i < M; i++) {
            adj[i] = new ArrayList<>();
        }

        // 读取N条边,构建无向图
        for (int i = 0; i < N; i++) {
            int u = scanner.nextInt() - 1; // 节点编号从1开始,转换为0-based
            int v = scanner.nextInt() - 1;
            adj[u].add(v);
            adj[v].add(u);
        }

        // 开始回溯,从第0个节点开始
        backtrack(0, new boolean[M]);

        // 输出有效染色方案的数量
        System.out.println(count);

        scanner.close(); // 关闭扫描器
    }

    /**
     * 回溯函数,用于遍历所有可能的染色方案
     *
     * @param node 当前处理的节点编号
     * @param red  当前已染为红色的节点集合
     */
    private static void backtrack(int node, boolean[] red) {
        // 如果所有节点都已处理,增加计数
        if (node == M) {
            count++;
            return;
        }

        // 尝试将当前节点染为黑色
        backtrack(node + 1, red);

        // 尝试将当前节点染为红色
        boolean canBeRed = true;
        for (int neighbor : adj[node]) {
            if (red[neighbor]) {
                canBeRed = false; // 相邻节点已染红,不能染红
                break;
            }
        }

        if (canBeRed) {
            red[node] = true; // 将当前节点染为红色
            backtrack(node + 1, red);
            red[node] = false; // 回溯,撤销染色
        }
    }
}

七、效果展示

1、输入

4 6
1 2
1 3
1 4
2 3
2 4
3 4

2、输出

5

3、说明

完全图K4,所有节点互相连接。有效染色方案为:

所有节点黑色

1红,其余黑
2红,其余黑
3红,其余黑
4红,其余黑

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/903303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python+pandas读取Excel将表头为键:对应行为值存为字典—再转json

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、方法1:5、方法2总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自…

摸鱼小工具-窗口隐藏透明

摸鱼小工具-窗口隐藏透明 介绍 就很简单的一个工具&#xff0c;鼠标移上去显示&#xff0c;鼠标离开就透明。具体看图。 源码以及下载地址

vue封装信号强度

图标下载链接: https://pan.baidu.com/s/1828AidkCKU1KTkw1SvBwQg?pwd4k7n 共五格信号 信号5为绿色&#xff0c;信号4为绿色&#xff0c;信号3为黄色&#xff0c;信号2为黄色&#xff0c;信号1为红色&#xff0c;信号0为灰色。 子组件 /components/SignalStrength/index.vu…

使用常数指针作为函数参数

在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用setbas…

简易了解Pytorch中的@ 和 * 运算符(附Demo)

目录 1. 基本知识2. 3. * 1. 基本知识 在 PyTorch 中&#xff0c; 和 * 运算符用于不同类型的数学运算&#xff0c;具体是矩阵乘法和逐元素乘法 基本知识 运算符功能适用场景示例矩阵乘法&#xff08;或点乘&#xff09;用于执行线性代数中的矩阵乘法C A B&#xff0c;其中…

VulkanTutorial(8·Shader modules)

Shader modules 与早期的API不同&#xff0c;Vulkan中的着色器代码必须以字节码格式指定&#xff0c;而不是人类可读的语法&#xff0c;如GLSL和HLSL。这种字节码格式称为SPIR-V它是一种可用于编写图形和计算着色器的格式 使用像SPIR-V这样简单的字节码格式&#xff0c;不会面…

读数据工程之道:设计和构建健壮的数据系统23批量获取的考虑因素

1. 批量获取的考虑因素 1.1. 批量获取&#xff0c;通常是获取数据的一种便捷方式 1.1.1. 通过从源系统中抽取一个数据子集&#xff0c;根据时间间隔或累积数据的大小来获取数据 1.2. 基于时间间隔的批量获取在传统ETL的数据仓库中很普遍 1.2.1. 每天在非工作时间&#xff0…

Cyber​​Panel upgrademysqlstatus 远程命令执行漏洞(QVD-2024-44346)

0x01 产品简介 CyberPanel是一个开源的Web控制面板,它提供了一个用户友好的界面,用于管理网站、电子邮件、数据库、FTP账户等。CyberPanel旨在简化网站管理任务,使非技术用户也能轻松管理自己的在线资源。 0x02 漏洞概述 该漏洞源于upgrademysqlstatus接口未做身份验证和…

【形态学 - 击中-击不中变换(很多都讲得不直观不清楚,甚至是错的,我来个通俗易懂的)】

简单描述过程&#xff1a; 一般的目标匹配是&#xff0c;知道目标长什么样&#xff0c;用这个模板去匹配。这里还知道目标周围环境长什么样。 如何把环境的信息加进来用来帮助匹配呢。这个就是击中-击不中联合匹配了。 就是用亮图去匹配目标。 再用暗图去匹配背景。 两个联合起…

【蓝桥杯选拔赛真题78】python电话号码 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python电话号码 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python电话号码 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…

单细胞数据分析(四):细胞亚型注释

文章目录 介绍加载R包导入数据细胞簇可视化细胞簇标记基因细胞识别输出结果系统信息介绍 单细胞细胞亚型注释是指在单细胞聚类分析后,对每个聚类得到的细胞群体进行生物学意义上的分类和识别的过程。这一步骤的目的是为了确定每个细胞群体对应的具体细胞类型或状态,从而更好…

CI/CD 的原理

一、CI/CD 的概念 CI/CD是一种软件开发流程&#xff0c;旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。 CI(Continuous Integration)持续集成 目前主流的开发方式是协同开发&#xff0c;即多位开发人员同事处理同意应用不同模块或功能。 如果企业在同一时间将…

常见大气校正模型及6S模型安装部署【20241028】

⛄常见大气校正模型 大气校正是遥感图像标准化处理的重要环节&#xff0c;消除太阳辐射传输过程中大气对于遥感图像的影响&#xff0c;提高影像的清晰度&#xff0c;获取地物真实的光谱信息。由于大气条件较为复杂&#xff0c;且随区域地理分布和观测时间是动态变化的&#xf…

map 和 set 的使用

文章目录 一.序列式容器和关联式容器二. set 系列的使用1. set 和 multiset 参考文档2. set 类介绍3. set 的构造和迭代器4. set 的增删查5. insert 和迭代器遍历使用样例6. find 和 erase 使用样例7. multiset 和 set 的差异 三. map 系列的使用1. map 和 multimap参考文档2. …

区块链可投会议CCF A--ICDE 2025 截止11.25 附2024录用数

Conference&#xff1a; IEEE International Conference on Data Engineering (ICDE) CCF level&#xff1a;CCF A Categories&#xff1a;Database/Data Mining/Content Retrieval Year&#xff1a;2025 Conference time&#xff1a; May 19-23, 2025 录用数&#xff1a;…

SLAM:未来智能科技的核心——探索多传感器融合的无限可

前言 作为2024年刚入学的研一新生&#xff0c;我初步选择了SLAM&#xff08;Simultaneous Localization and Mapping&#xff0c;即同时定位与地图构建&#xff09;作为我的研究方向。虽然在理论学习上已经有了一些基础&#xff0c;但目前的我并没有太多的实践经验。这让我在面…

Black Basta 勒索软件冒充 Microsoft Teams 的 IT 支持人员入侵网络

BlackBasta 勒索软件行动已将其社会工程攻击转移到 Microsoft Teams&#xff0c;伪装成公司帮助台联系员工以协助他们进行正在进行的垃圾邮件攻击。 Black Basta 是一个勒索软件行动&#xff0c;自 2022 年 4 月起活跃&#xff0c;并对全球数百起企业攻击负责。 2022 年 6 月…

Java语言-接口(下)

目录 1. 接口使用实例 1.1 给对象数组排序 1.2 Clonable接口和深拷贝 Cloneable 浅拷贝 深拷贝 1.3 抽象类和接口的区别 2. Object类 2.1 Object类的介绍 2.2 toString() 2.3 equals() 2.4 hashcode() 1. 接口使用实例 1.1 给对象数组排序 现有一个学生类&#…

Let‘s Verify Step by Step(openai-o1论文技术调研)

Let’s Verify Step by Step openai的经典论文&#xff0c;发布于2023年5月31日&#xff0c;为当前openai-o1奠定了技术基础&#xff0c;同时开源了PRM800K数据集&#xff0c;为开源社区贡献了十分宝贵的参考 paper原文链接 : https://arxiv.org/abs/2305.20050 论文概述 当前…

VUE, element-plus, table分页表格列增加下拉筛选多选框,请求后台

简介 为了方便表格查询时可以筛选列的值&#xff0c;需要给列增加筛选框&#xff08;多选框&#xff09;&#xff0c;element-plus提供了列的filter字段&#xff0c;但是基于表格数据的筛选&#xff0c;不会重新请求后台&#xff0c;而且当前表格数据有多少个条目&#xff0c;…