Bonusový úkol 3

Pro přirozené číslo m uvažujeme množinu X = {0, 1, ..., m − 1}. Binární relaci R na množině X můžeme reprezentovat jako matici s m řádky a m sloupci (řádky a sloupce jsou číslovány od 0) následujícím způsobem: pokud (i, j) ∈ R, je na řádku i ve sloupci j hodnota 1, jinak je tam hodnota 0.

Matici lze v programu zachytit pomocí pole tak, jak jsme si ukázali na semináři. Pole má velikost m ⋅ m, hodnota matice na řádku i ve sloupci j se nachází na indexu i ⋅ m + j.

Naprogramujte funkce:

int equivalence(int r[], int m);
void transitive_closure(int r[], int m);

Funkce equivalence oveří jestli je relace reprezentovaná polem r ekvivalencí. Funkce transitive_closure upraví r na její tranzitivní uzávěr. Argument m u obou funkcí má význam velikosti množiny X (tedy velikost r je m*m).

Za první funkci lze získat 2 body, za druhou funkci 1 bod.