Я изучаю курс Седжвика по алгоритмам и у меня возникают проблемы с пониманием структуры данных, используемой при решении проблемы перколяции в Java.
То, что я выяснил самостоятельно (без учета решений других ) заключается в том, что для сетки будет использоваться логический массив NxN
( true / false обозначает открытое / закрытое поле). Однако при использовании виртуальной вершины и низа решение определяет их как:
bottom = N * N + 1; //virtual bottom
private int top = 0; //virtual top
и взвешенный объект UnionFind как:
uf = new WeightedQuickUnionUF(N * N + 2);
Может кто-нибудь объяснить, почему это так: N * N + 2 ?
Код для WeightedQuickUnion:
public WeightedQuickUnionUF(int n) {
count = n;
parent = new int[n];
size = new int[n];
for (int i = 0; i < n; i++) {
parent[i] = i;
size[i] = 1;
}
}