Cod sursa(job #1824691)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 8 decembrie 2016 11:47:22
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <stdint.h>
using namespace std;
fstream f1("royfloyd.in", ios::in);
fstream f2("royfloyd.out", ios::out);
int16_t n, a[101][101];
const int16_t inf=9999;
///verifici pentru fiecare nod k daca drumul de la orice nod i catre orice nod j este mai scurt prin el
///primesti matricea costurilor, a[x][y]= dist sau 0 daca nu este muchie intre x s y
int main()
{
    int16_t i, j, k;
    f1>>n;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
    {
        f1>>a[i][j];
        if((i!=j)&&(!a[i][j])) a[i][j]=inf;
    }
    for(k=1; k<=n; k++)
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
    {
        if((i!=j)&&(j!=k)&&((a[i][k]+a[k][j])<a[i][j])) a[i][j]=a[i][k]+a[k][j];

    }

    ///afisare
     for(i=1; i<=n; i++)
      {
            for(j=1; j<=n; j++)
                if(a[i][j]!=inf) f2<<a[i][j]<<" ";
                else f2<<0<<" ";
        f2<<"\n";
      }
     return 0;
}
///daca schimbi ordinea forurilor pastrand cond, de ex i, j, k
///pp ca ai 3 noduri, i=1, j=2, k=3, la prima rulare valida
///tu verifici daca drumul prin k de la i la j este mai scurt decat cel direct
///dar nu stii sigur daca ai actualizat drumul de la i de ex catre j , pentru un k de indice mai mic
///deci risti sa consideri drumul mai lung decat este