#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void shortest_distance(vector<vector<int>>&matrix) {
int n = matrix.size();
for(int i=0;i<n;i++){
matrix[i][i] = 0;
}
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
if(i==k) continue;
for(int j=0;j<n;j++){
if(i==j or j==k) continue;
if(matrix[i][k] == -1 or matrix[k][j] == -1) continue;
matrix[i][j] = matrix[i][j] == -1 ? matrix[i][k]+matrix[k][j] : min(matrix[i][k]+matrix[k][j],matrix[i][j]);
}
}
}
}
int main() {
int V = 4;
vector<vector<int>> matrix(V, vector<int>(V, -1));
matrix[0][1] = 2;
matrix[1][0] = 1;
matrix[1][2] = 3;
matrix[3][0] = 3;
matrix[3][1] = 5;
matrix[3][2] = 4;
shortest_distance(matrix);
for (auto row : matrix) {
for (auto cell : row) {
cout << cell << " ";
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgc2hvcnRlc3RfZGlzdGFuY2UodmVjdG9yPHZlY3RvcjxpbnQ+PiZtYXRyaXgpIHsKCWludCBuID0gbWF0cml4LnNpemUoKTsKCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCW1hdHJpeFtpXVtpXSA9IDA7Cgl9Cglmb3IoaW50IGs9MDtrPG47aysrKXsKCQlmb3IoaW50IGk9MDtpPG47aSsrKXsKCQkJaWYoaT09aykgY29udGludWU7CgkJCWZvcihpbnQgaj0wO2o8bjtqKyspewoJCQkJaWYoaT09aiBvciBqPT1rKSBjb250aW51ZTsKCQkJCWlmKG1hdHJpeFtpXVtrXSA9PSAtMSBvciBtYXRyaXhba11bal0gPT0gLTEpIGNvbnRpbnVlOwoJCQkJbWF0cml4W2ldW2pdID0gbWF0cml4W2ldW2pdID09IC0xID8gbWF0cml4W2ldW2tdK21hdHJpeFtrXVtqXSA6IG1pbihtYXRyaXhbaV1ba10rbWF0cml4W2tdW2pdLG1hdHJpeFtpXVtqXSk7CgkJCX0KCQl9Cgl9Cn0KCmludCBtYWluKCkgewoJaW50IFYgPSA0OwoJdmVjdG9yPHZlY3RvcjxpbnQ+PiBtYXRyaXgoViwgdmVjdG9yPGludD4oViwgLTEpKTsKCW1hdHJpeFswXVsxXSA9IDI7CgltYXRyaXhbMV1bMF0gPSAxOwoJbWF0cml4WzFdWzJdID0gMzsKCW1hdHJpeFszXVswXSA9IDM7CgltYXRyaXhbM11bMV0gPSA1OwoJbWF0cml4WzNdWzJdID0gNDsKCglzaG9ydGVzdF9kaXN0YW5jZShtYXRyaXgpOwoKCWZvciAoYXV0byByb3cgOiBtYXRyaXgpIHsKCQlmb3IgKGF1dG8gY2VsbCA6IHJvdykgewoJCQljb3V0IDw8IGNlbGwgPDwgIiAiOwoJCX0KCQljb3V0IDw8IGVuZGw7Cgl9CgoJcmV0dXJuIDA7Cn0=