Ввод: граф, представленный в формате FO. Размер графа не более 150 вершин.
Тобиш при вводе в программу.
5
0
3 4 0
2 5 0
2 5 0
3 4 0
я должен получить результат
-1 -1 -1 -1 -1
-1 2 1 1 2
-1 1 2 2 1
-1 1 2 2 1
-1 2 1 1 2
Задачу надо решить успользуя алгоритм Флойда.Для его использования надо исходные данные преобразовать в матрицу смежности,вот тут то у меня и возникли проблемы.
#pragma hdrstop
#pragma argsused
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
const int INF = 100*1000*1000;
int main()
{
// считываем матрицу графа
int n;
int t;
cin >> n;
vector < vector<int> > g (n, vector<int> (n));
for (int i=0; i<n; i++)
{
do
{
cin >> t;
for (int j=0; j<n; j++)
{
if (j==i)
{
if (t==0)
{
g[i][j] = t ? t : INF;
}
else
{
g[i][j] = 2;
}
}
else
{
if (j==(t-1))
{
g[i][j] =1;
}
}
}
}
while (t!=0);
}
// собственно алгоритм
// храним две матрицы: для текущего шага и от предыдущего шага
vector<vector<int> > d (n), d2;
d2 = g;
for (int i=0; i<n; i++)
d[i].resize (n+1);
for (int k=0; k<n; ++k)
for (int i=0; i<n; ++i)
for (int j=0; j<n; ++j)
if (d[i][k] < INF && d[k][j] < INF)
d[i][j] = min (d[i][j], d[i][k] + d[k][j]);
// выводим результат
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
cout << (d[i][j]<INF ? d[i][j] : -1) << ' ';
cout << endl;
}
}
Как я не старался получить что либо более сносное,ничего не вышло,поэтому прошу помощи.