判断二分图

news2024/11/15 13:31:57

题目链接

判断二分图

题目描述



注意点

  • graph.length == n
  • 不存在自环(graph[u] 不包含 u)
  • 不存在平行边(graph[u] 不包含重复值)
  • 如果 v 在 graph[u] 内,那么 u 也应该在 graph[v] 内(该图是无向图)
  • 这个图可能不是连通图,也就是说两个节点 u 和 v 之间可能不存在一条连通彼此的路径

解答思路

  • 使用广度优先遍历解决,从起始点开始,遍历其所有相邻点,起始点分第一类,其相邻点分到第二类,相邻点的相邻点又分到第一类,以此类推…如果bfs能将所有点都划分为两类,说明可以划分为二分图;如果中间某个相邻点与当前节点分在了同一类,则说明无法划分为二分图
  • 需要注意的是图可能不是连通图,所以不能只是从第一个节点开始遍历(会漏掉未与第一个连通的节点)

代码

class Solution {
    public boolean isBipartite(int[][] graph) {
        int n = graph.length;
        // 0标识节点未分类,1表示分在第一类,-1表示分在第二类
        int[] arr = new int[n];
        Deque<Integer> dq = new ArrayDeque<>();
        for (int i = 0; i < n; i++) {
            if (arr[i] != 0) {
                continue;
            }
            arr[i] = 1;
            dq.offer(i);
            while (!dq.isEmpty()) {
                int x = dq.poll();
                int color = arr[x];
                // x点的相邻点
                for (int y : graph[x]) {
                    // 相邻点已分类且与当前节点在同一类,则无法二分
                    if (arr[y] == color) {
                        return false;
                    }
                    if (arr[y] == 0) {
                        arr[y] = -color;
                        dq.offer(y);
                    }
                }
            }
        }
        return true;
    }
}

关键点

  • 广度优先遍历的思想
  • 遍历每个点作为起始点的情况
  • 注意判断每个点的分类情况

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度解析C++中函数重载与引用

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1. 函数重载1.1 函数重载概念1.2 C支持函数重载…

前端Flex布局常见的几个问题

1. 如何设置Flex布局的排列方向&#xff1f; 要设置Flex布局的排列方向&#xff0c;你可以使用CSS的flex-direction属性。该属性有四个值可以选择&#xff1a;row&#xff08;默认值&#xff0c;水平排列&#xff09;、row-reverse&#xff08;反向水平排列&#xff09;、colu…

零信任赋予安全牙齿,AI促使它更锋利

距离上次写关于安全的文字已经过去了很久很久&#xff0c;久到上次看到的AI还停留在TTS、ASR等最初的语音交互搜索类似的各种智能音箱以及通过关键字匹配的基于知识库的聊天的机器人。之后的几年各种视觉识别遍地开花&#xff0c;AI四小龙在人脸识别上成熟应用&#xff0c;再然…

Java:数字验证

Java中的有效数字验证&#xff1a;从混乱到清晰 引言问题背景初始尝试&#xff1a;一段令人困惑的代码解决方案&#xff1a;简化与重构 结语 引言 在计算机科学领域&#xff0c;确保输入数据的有效性至关重要。 尤其在处理用户提交的数据或解析文本文件时&#xff0c;确认数据…

第二证券:大洗牌!头部券商营收、净利集体下滑

前十券商营收团体下滑&#xff0c;银河证券跌幅最小 新股IPO数量锐减129家至44家&#xff0c;国内证券市场股票基金交易量日均规划 同比下降 6.83%……关于证券公司而言&#xff0c;本年上半年可谓多重要素叠加冲击&#xff0c;成果下滑难以避免。于大多数证券公司而言&#x…

金融行业选择数据安全交换系统三定律,你遵从了没?

金融行业对我国的重要性不言而喻&#xff0c;它作为国民经济的血脉&#xff0c;是国家核心竞争力的重要组成部分。金融行业是数据密集型行业&#xff0c;数据是金融行业的重要资产。数据在金融行业内部及内外部流动时&#xff0c;其价值才得以发挥&#xff0c;金融行业的业务以…

在麒麟系统安装php7.4中遇到的问题

一、安装过程 下载相关php安装包&#xff0c;进行解压&#xff0c;进入安装包&#xff0c;进行编译安装&#xff0c;编译 ./configure --prefix/soft/php74 --with-config-file-path/soft/php74/etc --with-libdir/usr/lib64 --with-freetype/usr/include/freetype2/free…

Zynq7000系列FPGA中的DDRC纠错码(ECC)

仅在半总线宽度&#xff08;16位&#xff09;数据宽度配置中提供可选的ECC支持。这种配置下&#xff0c;外部DRAM DDR设备需要26位&#xff0c;其中16位用于数据&#xff0c;10位用于ECC。每个数据字节使用独立的5位ECC字段&#xff0c;这种模式提供了单错误纠正和双错误检测的…

【C++】vector迭代器失效问题

本文是对vector迭代器失效问题的分析&#xff0c;需要对vector有一定了解&#xff0c;若还不了解的可以看这篇文章进行学习&#xff1a;【C】容器vector常用接口详解-CSDN博客 目录 一.什么是迭代器失效&#xff1f; 二.迭代器失效的典型案例 1.引起底层空间改变 2.指定位置…

Docker 在 Windows 上的使用指南

Docker 在 Windows 上的使用指南 Docker 是一种强大的容器化平台&#xff0c;广泛应用于开发和生产环境。本文将介绍如何在 Windows 系统上使用 Docker&#xff0c;包括容器的启动、常见问题的排查&#xff0c;以及网络问题的解决方法。 1. Docker 安装与配置 在开始使用 Do…

大模型书单指南:如何快速找到最适合你的那一本书?别找了就是这本!

大模型的书这么多&#xff0c;该怎么选呢&#xff1f; 本期书单就来教大家怎么快速地从众多大模型书中选到你想要的那一本&#xff01; 大模型基础 大模型入门不可错过的一本书&#xff0c;就是这本大模型界的经典畅销书**《大规模语言模型》**&#xff01;系统性强&#xf…

如何从 Mac 上清空的垃圾箱中恢复误删除的文件

在 Mac 上删除的文件将被移至垃圾箱并保留 30 天&#xff0c;然后才会被永久删除。但是&#xff0c;许多 Mac 用户可能会意外清空垃圾箱而没有意识到其中包含了重要文件。本指南包含从清空的垃圾箱中恢复 Mac 上已删除文件的所有有效方法。 当您意识到自己意外清空了 Mac 上的…

C语言基础(三十一)

1、线性搜索&#xff1a; #include "date.h" #include <stdio.h> #include <stdlib.h> #include <time.h> // 希尔排序 void shellSort(int arr[], int n) { for (int gap n / 2; gap > 0; gap / 2) { for (int i gap; i < n; i…

vue学习记录十四:路由(router)学习(五):Vue Router基本原理实现第二种方法

vue学习记录十四&#xff1a;路由&#xff08;router&#xff09;学习&#xff08;四&#xff09;&#xff1a;Vue Router基本原理实现二 一、vueRouter目录结构二、模拟vueRouter目录结构三、index.js文件实现四、install.js文件实现五、创建组件六、解析路由规则七、match实现…

浅谈人工智能之基于anaconda的AutoGen Studio环境搭建

浅谈人工智能之基于anaconda的AutoGen Studio环境搭建 AutoGen Studio 是一个基于 AutoGen 框架的图形用户界面&#xff08;GUI&#xff09;工具。它使开发人员能够更轻松地创建和管理多智能体应用&#xff0c;而无需编写代码。AutoGen Studio 提供了拖放式界面和各种预构建模…

绿色革命:‘众店‘如何重塑零售业并引领消费新潮流

在数字化浪潮的推动下&#xff0c;传统零售业正面临深刻的变革。在这一过程中&#xff0c;绿色积分系统作为一种创新的消费模式&#xff0c;逐渐成为市场的新宠。 一、"众店"平台的迅猛发展 "众店"平台仅用两年时间就实现了跨越式发展&#xff0c;交易额突…

JS基础【双重for循环的实现与应用、打印九九乘法表】

&#x1f680; 个人简介&#xff1a;某大型国企资深软件开发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主、华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f970; &#…

springboot+MySQL流浪猫狗疾病预约救治系统-计算机毕设 附源码 13676

springboot流浪猫狗疾病预约救治系统 摘 要 现如今在中国&#xff0c;随着人民生活质量的逐渐提高&#xff0c;以及人民群众消费能力的日渐增长&#xff0c;各种各样的家养小动物&#xff0c;已经逐渐成为人类越来越亲密的生活伴侣。并且&#xff0c;现如今社会竞争及其激烈&am…

钢铁百科:A633D交货状态、A633D对应牌号、A633D力学性能解析

A633D钢板是一种美标低合金高强度结构钢板&#xff0c;也被称为A633GrD钢板&#xff0c;其执行标准为ASTM/A633M。这种钢板以其高屈服强度、良好的韧性、抗腐蚀性和耐疲劳性而著称&#xff0c;广泛应用于建筑、桥梁、船舶、汽车、铁路、重型机械及矿山机械等多个领域。 一、A6…

【CSS】如何写渐变色文字并且有打光效果

效果如上&#xff0c;其实核心除了渐变色文字的设置 background: linear-gradient(270deg, #d2a742 94%, #f6e2a7 25%, #d5ab4a 48%, #f6e2a7 82%, #d1a641 4%);color: #e8bb2c;background-clip: text;color: transparent;还有就是打光效果&#xff0c;原理其实就是两块遮罩&am…