Что эта строка кода делает в алгоритме двудольного графа через bfs? - PullRequest
1 голос
/ 03 июля 2019

Я читал двудольный алгоритм из https://cp -algorithms.com / graph / bipartite-check.html , и мне встретилась строка:

side[u] = side[v] ^ 1

Что делает эта строка кода? Что означает ^ 1 ?

Попробовал погуглить, но не дал результата.

1 Ответ

0 голосов
/ 03 июля 2019

^ - это битовый оператор xor в C ++ (также в C, Java и т. Д.).

Побитовый xor бита (0/1) с 1 переворачиванием этого бита, т.е.

0 ^ 1 = 1
1 ^ 1 = 0

Как указано в википедии

Побитовый XOR может использоваться для инвертирования выбранных битов в регистре (также называемый переключением или переключением). Любой бит может быть переключен путем XORing его с 1.

В этом алгоритме он используется для определения набора, к которому должен принадлежать узел u.
Поскольку u и v связаны (поскольку u находится в списке смежности v), то u должен принадлежать другому набору как v (свойство двудольного графа).
Наборы записываются в массиве side[], который хранит 0 или 1 для двух непересекающихся наборов вершин и -1 как неинициализированное значение.

...