#include <iostream>
using namespace std;
#define V 4
#define N 99999
void printSolution(int dist[][V]);
void floydWarshall (int graph[][V])
{
int dist[V][V], i, j, k;
for (i = 0; i < V; i++)
for (j = 0; j < V; j++)
dist[i][j] = graph[i][j];
for (k = 0; k < V; k++)
{
for (i = 0; i < V; i++)
{
for (j = 0; j < V; j++)
{
if (dist[i][k] + dist[k][j] < dist[i][j])
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
printSolution(dist);
}
void printSolution(int dist[][V])
{
cout<<"The following matrix shows the shortest distances"
" between every pair of vertices \n";
for (int i = 0; i < V; i++)
{
for (int j = 0; j < V; j++)
{
if (dist[i][j] == N)
cout<<"N"<<" ";
else
cout<<dist[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
int graph[V][V] = { {0, 5, N, 10},
{N, 0, 3, N},
{N, N, 0, 1},
{N, N, N, 0}
};
floydWarshall(graph);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiNkZWZpbmUgViA0ICAKI2RlZmluZSBOIDk5OTk5ICAKIAp2b2lkIHByaW50U29sdXRpb24oaW50IGRpc3RbXVtWXSk7ICAKIAp2b2lkIGZsb3lkV2Fyc2hhbGwgKGludCBncmFwaFtdW1ZdKSAgCnsgIAogICAgaW50IGRpc3RbVl1bVl0sIGksIGosIGs7ICAKIAogICAgZm9yIChpID0gMDsgaSA8IFY7IGkrKykgIAogICAgICAgIGZvciAoaiA9IDA7IGogPCBWOyBqKyspICAKICAgICAgICAgICAgZGlzdFtpXVtqXSA9IGdyYXBoW2ldW2pdOyAgCiAKICAgIGZvciAoayA9IDA7IGsgPCBWOyBrKyspICAKICAgIHsgIAogICAgICAgIGZvciAoaSA9IDA7IGkgPCBWOyBpKyspICAKICAgICAgICB7ICAKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IFY7IGorKykgIAogICAgICAgICAgICB7ICAgCiAgICAgICAgICAgICAgICBpZiAoZGlzdFtpXVtrXSArIGRpc3Rba11bal0gPCBkaXN0W2ldW2pdKSAgCiAgICAgICAgICAgICAgICAgICAgZGlzdFtpXVtqXSA9IGRpc3RbaV1ba10gKyBkaXN0W2tdW2pdOyAgCiAgICAgICAgICAgIH0gIAogICAgICAgIH0gIAogICAgfSAgCiAKICAgIHByaW50U29sdXRpb24oZGlzdCk7ICAKfSAgCiAKdm9pZCBwcmludFNvbHV0aW9uKGludCBkaXN0W11bVl0pICAKeyAgCiAgICBjb3V0PDwiVGhlIGZvbGxvd2luZyBtYXRyaXggc2hvd3MgdGhlIHNob3J0ZXN0IGRpc3RhbmNlcyIKICAgICAgICAgICAgIiBiZXR3ZWVuIGV2ZXJ5IHBhaXIgb2YgdmVydGljZXMgXG4iOyAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8IFY7IGkrKykgIAogICAgeyAgCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBWOyBqKyspICAKICAgICAgICB7ICAKICAgICAgICAgICAgaWYgKGRpc3RbaV1bal0gPT0gTikgIAogICAgICAgICAgICAgICAgY291dDw8Ik4iPDwiICAgICAiOyAgCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvdXQ8PGRpc3RbaV1bal08PCIgICAgICI7ICAKICAgICAgICB9ICAKICAgICAgICBjb3V0PDxlbmRsOyAgCiAgICB9ICAKfSAgCiAKaW50IG1haW4oKSAgCnsgIAogICAgaW50IGdyYXBoW1ZdW1ZdID0geyB7MCwgNSwgTiwgMTB9LCAgCiAgICAgICAgICAgICAgICAgICAgICAgIHtOLCAwLCAzLCBOfSwgIAogICAgICAgICAgICAgICAgICAgICAgICB7TiwgTiwgMCwgMX0sICAKICAgICAgICAgICAgICAgICAgICAgICAge04sIE4sIE4sIDB9ICAKICAgICAgICAgICAgICAgICAgICB9OyAgCiAKICAgIGZsb3lkV2Fyc2hhbGwoZ3JhcGgpOyAgCiAgICByZXR1cm4gMDsgIAp9