这行代码通过bfs在二分图算法中做了什么?

What does this line of code do in bipartite graph algorithm through bfs?

我一直在阅读 https://cp-algorithms.com/graph/bipartite-check.html 的二分算法,我遇到了一行:

side[u] = side[v] ^ 1

这行代码是做什么的? ^1是什么意思?

尝试用谷歌搜索,但没有得出任何结果。

^ 是 C++ 中的 bitwise xor 运算符(也在 C 中,Java 等)。

位(0/1)与1的按位异或翻转该位,即

0 ^ 1 = 1
1 ^ 1 = 0

根据维基百科

The bitwise XOR may be used to invert selected bits in a register (also called toggle or flip). Any bit may be toggled by XORing it with 1.

在这个算法中,它被用来决定节点 u 应该属于哪个集合。
由于uv是连通的(因为uv的邻接表中),所以u应该和[=14属于不同的集合=](二部图的属性)。
这些集合被记录在 side[] 数组中,该数组为两个不相交的顶点集存储 0 或 1,并且 -1 作为未初始化的值。