var isBipartite = function (graph) {
let n = graph.length;
let res = true;
// 记录图中节点的颜色,false 和 true 代表两种不同颜色
let color = new Array(n).fill(false);
let visited = new Array(n).fill(false); // 记录图中节点是否被访问过
function traverse(src) {
if (!res) return; // 已经确定不是二分图了
visited[src] = true;
for (let g of graph[src]) {
if (!visited[g]) {
// 因为相邻,所以需要涂不同的色
color[g] = !color[src];
// 继续遍历相邻节点
traverse(g);
} else {
// 相邻节点的颜色相同
if (color[g] === color[src]) {
res = false;
}
}
}
}
for (let i = 0; i < n; i++) {
if (!visited[i]) {
traverse(i);
}
}
return res;
};