Cod sursa(job #567130)

Utilizator rusu_raduRusu Radu rusu_radu Data 29 martie 2011 19:09:52
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream.h>
#define INF 1000000

ifstream fin ("royfloyd.in");
ofstream fout ("royfloyd.out");

int n, C[105][105];

void citire();
void RoyFloyd();
void afisare();

int main()
{
  citire();
  RoyFloyd();
  afisare();
  return 0;
}

void citire()
{
  int i, j, c;
  fin>>n;
  for (i=1; i<=n; i++)
    for (j=1; j<=n; j++)
    {
      fin>>c;//citim costul
      if (c==0)//daca costul e 0 nu avem muchie si punem costul INF
        C[i][j]=INF;
      else//altfel punem costul citit
        C[i][j]=c;
    }
}

void RoyFloyd()
{
  int i, j, k;
  for (k=1; k<=n; k++)
    for (i=1; i<=n; i++)
      for (j=1; j<=n; j++)
        if (i!=j && C[i][j]>C[i][k]+C[k][j])
          C[i][j]=C[i][k]+C[k][j];// forurile astea trei ti le explic maine in clasa pe un desen
//daca te duci pe campion la software...
//vezi ca ai acolo drumuri minime in graf... si daca intri pe softul ala ai algoritmul explicat si acolo
}

void afisare()
{
  int i, j;
  for (i=1; i<=n; i++)
  {
    for (j=1; j<=n; j++)
      if (C[i][j]!=INF)
        fout <<C[i][j]<<" ";
      else
        fout<<0<<' ';
    fout<<'\n';
  }
}