这行代码通过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
应该属于哪个集合。
由于u
和v
是连通的(因为u
在v
的邻接表中),所以u
应该和[=14属于不同的集合=](二部图的属性)。
这些集合被记录在 side[]
数组中,该数组为两个不相交的顶点集存储 0 或 1,并且 -1
作为未初始化的值。
我一直在阅读 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
应该属于哪个集合。
由于u
和v
是连通的(因为u
在v
的邻接表中),所以u
应该和[=14属于不同的集合=](二部图的属性)。
这些集合被记录在 side[]
数组中,该数组为两个不相交的顶点集存储 0 或 1,并且 -1
作为未初始化的值。