Pagini recente » Cod sursa (job #1388389) | Cod sursa (job #779374) | Cod sursa (job #1945646) | Cod sursa (job #1667685) | Cod sursa (job #1096671)
/* Algoritmul Roy-Floyd pentru determinarea drumului intre oricare doua noduri dintr-un graf orientat */
#include <cstdio>
#define MAX 101
#define INF 0x3f3f3f3f
int Bst[MAX][MAX], N;
void RoyFloyd()
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
{
if (Bst[i][j] == 0)
{
Bst[i][j] = INF;
}
}
for (int k = 0; k < N; k++)
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if (i != j && i != k && j != k && Bst[i][j] > Bst[i][k] + Bst[k][j])
{
Bst[i][j] = Bst[i][k] + Bst[k][j];
}
}
int main()
{
freopen("royfloyd.in","r",stdin);
freopen("royfloyd.out","w",stdout);
scanf("%d", &N);
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
{
scanf("%d", &Bst[i][j]);
}
RoyFloyd();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
printf("%d ", Bst[i][j] == INF ? 0 : Bst[i][j]);
printf("\n");
}
}