33template<
typename InCluster,
typename Neighbors>
39 res.sizes.reserve(64);
50 const int cid =
static_cast<int>(
res.sizes.size());
51 res.sizes.push_back(0);
58 neighbors(
i, [&](
int nb) {
59 if (
res.id[
nb] == -1) { res.id[nb] = cid; queue[qtail++] = nb; }
constexpr T ipow(T x) noexcept
Compute x^N at compile time via repeated squaring.
ClusterResult connected_components(int n_sites, InCluster &&in_cluster, Neighbors &&neighbors)
int largest_id
Index of largest cluster (-1 if none)
std::vector< int > id
Per-site label: -2 excluded, >=0 cluster index.
int largest_size
Size of largest cluster.
std::vector< int > sizes
sizes[c] = number of sites in cluster c