785. 判断二分图 每日一题 Go

785. 判断二分图

参考官方题解的染色法。

paint函数对idx的邻接点染色并递归。

对一个点使用paint函数会将其所在的整个连通图染色。

考虑到题中的图可能不是单连通图,因此需要对每个未染色的点 染色 并调用paint函数。

package main

import "fmt"

const (
	plain=iota
	red
	black
)

func paint(idx int, graph [][]int, color []int) bool {
	for _,v:=range graph[idx]{
		if color[v]==plain{
			color[v]=3-color[idx]
			if !paint(v,graph,color){
				return false
			}
		}else if color[v]==color[idx]{
			return false
		}
	}
	return true
}

func isBipartite(graph [][]int) bool {
	color:=make([]int, len(graph))
	for i:=0;i< len(graph);i++{
		if color[i]==plain{
			color[i]=red
		}
		if !paint(i, graph, color){
			return false
		}
	}
	return true
}

func main() {
	nums:=[][]int{{1,2,3},{0,2},{0,1,3},{0,2}}
	fmt.Println(isBipartite(nums))
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值