// LLP-Antichain: maximum antichain by advancing chain indices to // dominate-free positions. #include #include std::vector llpAntichain(const std::vector>& chains, const std::vector& len, const std::vector>& leq) { int n = (int)len.size(); std::vector G(n, 0); bool changed = true; while (changed) { changed = false; for (int j = 0; j < n; ++j) { if (G[j] >= len[j]) continue; bool dominated = false; for (int k = 0; k < n && !dominated; ++k) if (k != j && leq[chains[j][G[j]]][chains[k][G[k]]]) dominated = true; if (dominated) { ++G[j]; changed = true; } } } return G; } int main() { // Two two-element chains over a 4-element poset with no cross-relations. std::vector> chains = { {0, 1}, {2, 3} }; std::vector len = {2, 2}; std::vector> leq(4, std::vector(4, false)); for (int i = 0; i < 4; ++i) leq[i][i] = true; leq[0][1] = true; leq[2][3] = true; auto G = llpAntichain(chains, len, leq); std::cout << "G:"; for (int x : G) std::cout << ' ' << x; std::cout << '\n'; return 0; }