lab7 Q1.cpp
lab7 Q1.cpp
#include <vector>
#include <stdexcept>
class Percolation {
private:
int n;
std::vector<bool> openSites;
std::vector<int> parent;
std::vector<int> size;
int virtualTop;
int virtualBottom;
int openCount;
int root(int i) {
while (i != parent[i]) {
parent[i] = parent[parent[i]];
i = parent[i];
}
return i;
}
public:
Percolation(int n) : n(n), openSites(n * n, false), parent(n * n + 2), size(n *
n + 2, 1), openCount(0) {
if (n <= 0) throw std::invalid_argument("Grid size must be positive");
virtualTop = n * n;
virtualBottom = n * n + 1;
for (int i = 0; i < n * n + 2; ++i) {
parent[i] = i;
}
}
bool percolates() {
return connected(virtualTop, virtualBottom);
}
int main() {
Percolation::test();
return 0;
}