class Graph {
private:
int n;
list<int> *adj;
public:
Graph(int n) {
this->n = n;
adj = new list<int>[n];
}
int isEulerian() {
if (!isConnected())
return 0;
int odd = 0;
for (int i = 0; i < n; i++)
if (adj[i].size() & 1)
odd++;
if (odd > 2)
return 0;
return (odd)? 1 : 2;
}
};
В строке, где он появляется adj[i].size() & 1
, я не понимаю, что он делает, я не понимаю, с чем он сравнивается.
SГ-mbolo &
- оператор comparaciГіn бинарная; то, что он делает, одна operaciГіn И (AND) на бинарных данных в Вашу левую сторону и в Вашу правую сторону. Например:
101010
&
111000
--------
101000
ВїQuГ© это делает в cГіdigo, который ты показываешь примера?
if (adj[i].size() & 1)
odd++;
Odd в inglГ©s значь нечетные , из-за которого estГЎ считая все те .size()
они нечетные. Для этого он воспользуется оператором comparaciГіn И бинарный, так как у всех nГєmeros нечетные вселенной есть один 1
в бите меньшего количества веса:
| decimal | binario | & 1 |
+---------+---------+-----+
| 1 | 1 | 1 |
| 2 | 10 | 0 |
| 3 | 11 | 1 |
| 4 | 100 | 0 |
| 5 | 101 | 1 |
| 6 | 110 | 0 |
| 7 | 111 | 1 |
| 8 | 1000 | 0 |