#include <bits/stdc++.h>
using namespace std;
// Number of vertices in the graph
#define N 4
// Function to print the transitive closure of graph
void WarshellAlgorithm(bool graph[N][N])
{
// cost[][] stores transitive closure of the graph
bool cost[N][N];
// initialize cost[][] matrix
for (int v = 0; v < N; v++)
for (int u = 0; u < N; u++)
// initally cost would be same as weight
// of the edge
cost[v][u] = graph[v][u];
// Run Warshell algorithm
for (int k = 0; k < N; k++)
for (int v = 0; v < N; v++)
for (int u = 0; u < N; u++)
{
// If vertex k is on the shortest path from v to u,
// then update the value of cost[v][u]
if (!cost[v][u])
cost[v][u] = (cost[v][k] && cost[k][u]);
}
// Print the transitive closure of graph
for (int v = 0; v < N; v++)
{
for (int u = 0; u < N; u++)
cout << setw(3) << cost[v][u];
cout << endl;
}
}
int main()
{
bool graph[N][N] =
{
{ 1, 0, 1, 0 },
{ 1, 1, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 1, 0, 1 }
};
WarshellAlgorithm(graph);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBOdW1iZXIgb2YgdmVydGljZXMgaW4gdGhlIGdyYXBoCiNkZWZpbmUgTiA0CgovLyBGdW5jdGlvbiB0byBwcmludCB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlIG9mIGdyYXBoCnZvaWQgV2Fyc2hlbGxBbGdvcml0aG0oYm9vbCBncmFwaFtOXVtOXSkKewoJLy8gY29zdFtdW10gc3RvcmVzIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiB0aGUgZ3JhcGgKCWJvb2wgY29zdFtOXVtOXTsKCQoJLy8gaW5pdGlhbGl6ZSBjb3N0W11bXSBtYXRyaXgKCWZvciAoaW50IHYgPSAwOyB2IDwgTjsgdisrKQoJCWZvciAoaW50IHUgPSAwOyB1IDwgTjsgdSsrKQoJCQkvLyBpbml0YWxseSBjb3N0IHdvdWxkIGJlIHNhbWUgYXMgd2VpZ2h0IAoJCQkvLyBvZiB0aGUgZWRnZQoJCQljb3N0W3ZdW3VdID0gZ3JhcGhbdl1bdV07CgoJLy8gUnVuIFdhcnNoZWxsIGFsZ29yaXRobQoJZm9yIChpbnQgayA9IDA7IGsgPCBOOyBrKyspCgkJZm9yIChpbnQgdiA9IDA7IHYgPCBOOyB2KyspCgkJCWZvciAoaW50IHUgPSAwOyB1IDwgTjsgdSsrKQoJCQl7CgkJCQkvLyBJZiB2ZXJ0ZXggayBpcyBvbiB0aGUgc2hvcnRlc3QgcGF0aCBmcm9tIHYgdG8gdSwKCQkJCS8vIHRoZW4gdXBkYXRlIHRoZSB2YWx1ZSBvZiBjb3N0W3ZdW3VdCgkJCQlpZiAoIWNvc3Rbdl1bdV0pCgkJCQkJY29zdFt2XVt1XSA9IChjb3N0W3ZdW2tdICYmIGNvc3Rba11bdV0pOwoJCQl9CgkKCS8vIFByaW50IHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgZ3JhcGgKCWZvciAoaW50IHYgPSAwOyB2IDwgTjsgdisrKQoJewoJCWZvciAoaW50IHUgPSAwOyB1IDwgTjsgdSsrKQoJCQljb3V0IDw8IHNldHcoMykgPDwgY29zdFt2XVt1XTsKCgkJY291dCA8PCBlbmRsOwoJfQp9CgppbnQgbWFpbigpCnsKCWJvb2wgZ3JhcGhbTl1bTl0gPSAKCXsKCQl7IDEsIDAsIDEsIDAgfSwKCQl7IDEsIDEsIDAsIDAgfSwKCQl7IDAsIDAsIDEsIDAgfSwKCQl7IDAsIDEsIDAsIDEgfQoJfTsKCglXYXJzaGVsbEFsZ29yaXRobShncmFwaCk7CgoJcmV0dXJuIDA7Cn0K