每日一题算法: 2020年7月16日 [判断二分图] isBipartite

2020年7月16日 判断二分图 isBipartite

在这里插入图片描述

默认格式:

class Solution {
   
    public boolean isBipartite(int[][] graph) {
   

    }
}

解题思路:

这道题比较抽象,我们先尽可能多地挖掘信息。

graph[i]表示的是和i相连的点的值。

比如题中的graph[0]={1,2,3}表示0和1,2,3相连

所有的数都是连续的,并且不会出现重复。

问题1:

什么叫做分割为两个独立的子集。也就是所谓的二分图。

特点有以下两点。

每一条边的两端,分别在两个独立的子集中,子集中存的是部分的节点的集合,两个子集加起来就是所有节点的集合。

也许这么说会比较清楚:

我们先看示例1:

在这里插入图片描述

通过graph[0]={1,3}我们知道,0和3有一条边,0和1也有一条边,所以我们可以确定0和1、3不是在同一个子集中。

继续看graph[1]={0,2},我们知道了1和0不在同一个子集中,同时,1和2也不在同一个子集中,所以,目前我们可以知道1和3在同一个子集中,0和2在一个子集中,不过这还没完,因为我们没有遍历完所有的节点,我们需要遍历所有节点,确定后面不会出现矛盾的选项才可以(实际上不需要,如果2或者3和其他节点有相连,比如2和0有相连,那么在0中就必定存在2,而0的连接点没有2,所有可以推出2和0不相连)

然后看一个示例2:
在这里插入图片描述

通过graph[0]={1,2,3}我们知道,0和1,2,3都是相连的,所以,如果要分子集,只能是{0},{1,2,3},但是看第二个,graph[1]={0,2}我们又发现1和2也是相连的,所以1和2不能在同一个子集中,这样和之前的结论就产生矛盾了,说明这不是一个二分图。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值