Pagini recente » Atasamentele paginii Profil ticozaur | Zigzag | Istoria paginii utilizator/morph | Istoria paginii utilizator/yesterday | Cod sursa (job #1100961)
# include <cstdio>
/*# include <vector>
# include <queue>
using namespace std;
const int N = 50000;
struct Muchie
{
int nod, cost;
};
Muchie getMuchie (int nod, int cost)
{
Muchie m;
m. nod = nod;
m. cost = cost;
return m;
}
vector <Muchie> v [N + 1];
queue <int> q;
int rez [N + 1], heap [N + 1], pHeap [N + 1];
bool viz [N + 1];
int n, lHeap;
void citeste ()
{
int i, j, nr;
scanf ("%d", & n);
for (i = 1; i <= n; i ++)
for (j = 1; j <= n; j ++)
{
scanf ("%d", & nr);
v [i]. push_back (getMuchie (j, nr));
}
}
void initRez ()
{
int i;
for (i = 0; i <= n; i ++)
rez [i] = - 1;
}
void init ()
{
freopen ("royfloyd.in", "r", stdin);
freopen ("royfloyd.out", "w", stdout);
citeste ();
}
void change (int poz1, int poz2)
{
int aux = heap [poz1];
heap [poz1] = heap [poz2];
heap [poz2] = aux;
pHeap [heap [poz1]] = poz1;
pHeap [heap [poz2]] = poz2;
}
void insertHeap (int nod)
{
int poz;
bool f;
heap [++ lHeap] = nod;
pHeap [nod] = lHeap;
poz = lHeap / 2;
if (lHeap % 2 == 1)
f = true;
else
f = false;
while (rez [heap [poz]] > rez [nod])
{
if (f == false)
change (poz * 2, poz);
else
change (poz * 2 + 1, poz);
if (poz % 2 == 1)
f = true;
else
f = false;
poz /= 2;
}
}
void stergeHeap (int p)
{
int poz = p, aux, aux1, aux2;
bool f = false;
if (p == 0)
return;
pHeap [heap [p]] = 0;
heap [p] = heap [lHeap --];
pHeap [heap [p]] = p;
while (! f)
{
aux = rez [heap [poz]];
aux1 = rez [heap [poz * 2]];
aux2 = rez [heap [poz * 2 + 1]];
if (poz * 2 > lHeap)
aux1 = aux2 = - 1;
else
if (poz * 2 + 1 > lHeap)
aux2 = - 1;
if (aux1 < aux2 && aux1 != - 1)
if (aux1 < aux)
{
change (poz, poz * 2);
poz *= 2;
}
else
f = true;
else
if (aux2 < aux && aux2 != - 1)
{
change (poz, poz * 2 + 1);
poz = poz * 2 + 1;
}
else
f = true;
}
}
bool apartineHeap (int x)
{
int i;
for (i = 1; i <= lHeap; i ++)
if (heap [i] == x)
return true;
return false;
}
void dijkstra (int nod)
{
int i, nodC;
Muchie muchieC;
insertHeap (nod);
while (lHeap)
{
nodC = heap [1];
viz [nodC] = true;
if (nodC == 921)
i ++;
for (i = 0; i < v [nodC]. size (); i ++)
if (i + 1 != nodC)
{
muchieC = v [nodC] [i];
if (rez [muchieC. nod] == - 1 || rez [nodC] + muchieC. cost < rez [muchieC. nod])
{
rez [muchieC. nod] = rez [nodC] + muchieC. cost;
if (nodC == nod)
rez [muchieC. nod] ++;
stergeHeap (pHeap [muchieC. nod]);
insertHeap (muchieC. nod);
}
}
if (heap [1] != nodC)
i = 0;
stergeHeap (1);
}
}
void afisare (int p)
{
int i;
for (i = 1; i < p; i ++)
if (rez [i] < 0)
printf ("0 ");
else
printf ("%d ", rez [i]);
printf ("0 ");
for (i = p + 1; i <= n; i ++)
if (rez [i] < 0)
printf ("0 ");
else
printf ("%d ", rez [i]);
printf ("\n");
}
int main ()
{
int i;
init ();
for (i = 1; i <= n; i ++)
{
initRez ();
dijkstra (i);
afisare (i);
}
return 0;
}
*/
#include <stdio.h>
int n, a[105][105];
void citire()
{
freopen("royfloyd.in","r",stdin);
freopen("royfloyd.out","w",stdout);
int i, j;
scanf("%d",&n);
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++) scanf("%d",&a[i][j]);
}
void roy_floyd()
{
int i, j, k;
for (k = 1; k <= n; k++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i != j) a[i][j] = a[i][k] + a[k][j];
}
void afis()
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++) printf("%d ",a[i][j]);
printf("\n");
}
}
int main()
{
citire();
roy_floyd();
afis();
return 0;
}