Pagini recente » Cod sursa (job #1942863) | Cod sursa (job #1669057) | Cod sursa (job #3189408) | Cod sursa (job #3202610) | Cod sursa (job #145248)
Cod sursa(job #145248)
#include <cstdio>
using namespace std;
#define FIN "royfloyd.in"
#define FOUT "royfloyd.out"
#define MAX_N 105
#define INF 0x3f3f3f3
int MP[MAX_N][MAX_N];
int N, M, x, y, c, i, j, k;
void crearematpond ( void )
{
int i, j;
for (i = 1; i <= N; ++i)
for (j = 1; j <= N; ++j)
scanf ("%d", MP[i] + j);
for ( i = 1; i <= N; ++i)
for ( j = 1; j <= N; ++j)
if (i != j && !MP[i][j]) MP[i][j] = INF;
}
void way (int i, int j)
{
int k;
int found;
k = 1; found = 0;
while (k <= N && !found)
{
if (i != k && j != k && MP[i][j] == MP[i][k] + MP[k][j])
{
way (i, k); way(k, j);
found = 1;
}
++k;
}
if (!found) printf ("%d ", j);
}
void getway (int nodin, int nodout)
{
if (MP[nodin][nodout]<INF)
{
printf ("Lungimea: %d\n", MP[nodin][nodout]);
printf ("%d ", nodin);
way (nodin, nodout);
}
else printf ("Nu e drum!");
}
int main ()
{
freopen (FIN, "r", stdin);
freopen (FOUT, "w", stdout);
scanf ("%d", &N);
crearematpond ();
for ( k = 1; k <= N; ++k)
for ( i = 1; i <= N; ++i)
for ( j = 1; j <= N; ++j)
if (MP[i][j] > MP[i][k] + MP[k][j])
MP[i][j] = MP[i][k] + MP[k][j];
for ( i = 1; i <= N; ++i)
{
for ( j = 1; j <= N; ++j)
printf ("%d ", MP[i][j]);
printf ("\n");
}
// getway (1, 3);
return 0;
}