Leetcode - Is Graph Bipartite?
https://leetcode.com/problems/is-graph-bipartite/
Given an undirected graph, return true if and only if it is bipartite.
Recall that a graph is bipartite if we can split it's set of nodes into two independent subsets A and B such that every edge in the graph has one node in A and another node in B.
The graph is given in the following form: graph[i] is a list of indexes j for which the edge between nodes i and j exists. Each node is an integer between 0 and graph.length - 1. There are no self edges or parallel edges: graph[i] does not contain i, and it doesn't contain any element twice.
Example 1:
Input: [[1,3], [0,2], [1,3], [0,2]]
Output: true
Explanation:
The graph looks like this:
0----1
| |
| |
3----2
We can divide the vertices into two groups: {0, 2} and {1, 3}.
Example 2: Input: [[1,2,3], [0,2], [0,1,3], [0,2]] Output: false Explanation: The graph looks like this: 0----1 | \ | | \ | 3----2 We cannot find a way to divide the set of nodes into two independent subsets.
func isBipartite(graph [][]int) bool {
n := len(graph)
group := make([]int, n)
for i := 0; i < n; i++ {
if group[i] == 0 && !dfs(graph, &group, i, 1) {
return false
}
}
return true
}
func dfs(graph [][]int, group *[]int, index, g int) bool {
if (*group)[index] != 0 {
return (*group)[index] == g
}
(*group)[index] = g
for _, i := range graph[index] {
if !dfs(graph, group, i, 0 - g) {
return false
}
}
return true
}
Oct 20, 2021 08:48:16 PM
One of the best things is where things are very much sorted out for the users.