Cod sursa(job #1850741)

Utilizator JokerOsHreceniuc Cristian JokerOs Data 18 ianuarie 2017 21:18:38
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
using namespace std;
float A[101][101];
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int n,i,j;
#define PInfinit 1000
void Drum(int i, int j)
{
    int k=1, gasit=0;
    while((k<=n)&& !gasit)
    {
        if(i!=k&&j!=k&& A[i][j]==A[i][k]+A[k][j])
        {
            Drum(i, k);
            Drum(k, j);
            gasit=1;
        }
        k++;
    }
//    if(!gasit)
//        g<<j<<" ";
}
void Scriu_drum(int Nod_Initial, int Nod_Final)
{
    if(A[Nod_Initial][Nod_Final]<PInfinit)
//    {
//        g<<" Drumul de la "<<Nod_Initial<<" la "<<Nod_Final<<" are lungimea "<<A[Nod_Initial][Nod_Final]<<"\n";
//        g<<Nod_Initial<<" ";
        Drum(Nod_Initial, Nod_Final);
//    }
//    else
//        g<<"Nu exista drum de la "<<Nod_Initial<<" la "<<Nod_Final;
}
void Lungime_Drumuri()
{
    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][j]>A[i][k]+A[k][j])
                    A[i][j]=A[i][k]+A[k][j];
}
int main()
{
    f>>n;
    for(int q=1; q<=n; q++)
        for(int q1=1; q1<=n; q1++)
            f>>A[q][q1];
    Lungime_Drumuri();
    Scriu_drum(4, 2);
    for(int q=1;q<=n;q++)
    {
        for(int q1=1;q1<=n;q1++)
            g<<A[q][q1]<<" ";
        g<<"\n";
    }
    return 0;
}