Cod sursa(job #1854765)

Utilizator ZenoTeodor Anitoaei Zeno Data 23 ianuarie 2017 11:17:39
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <bits/stdc++.h>
#define NMAX 2001
#define INF 2000000000

using namespace std;

bool prim(int n)
{
    if(n == 1 || n == 0) return 0;
    if(n == 2) return 1;
    if(n % 2 == 0) return 0;
    for(int i = 3; i * i <= n + 1; i += 2)
        if(n % i == 0) return 0;
    return 1;
}

int pie(int a, int b)
{
    int c;
    while(b)
    {
        c = a % b;
        a = b;
        b = c;
    }
    return a;
}

void quik_sort(int inf, int sup, int V[])
{
    int x, i, j;
    i = inf;
    j = sup;
    x = V[(i + j) / 2];
    do
    {
        while ((i < sup) && (V[i] < x)) i++;
        while ((j > inf) &&(V[j] > x)) j--;
        if ( i<= j )
        {
            swap(V[i], V[j]);
            i++;
            j--;
        }
    }
    while ( i <= j );
    if ( inf < j ) quik_sort(inf, j, V);
    if ( i < sup ) quik_sort(i, sup, V);
}

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

FILE *f = fopen("f.in", "r");
FILE *g = fopen("f.out", "w");

int n, C[101][101], drum[101][101];

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
        {
            fin >> C[i][j];
            if(C[i][j] == 0 && i != j) C[i][j] = INF;
        }
    for(int k = 1; k <= n; k++)
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                if(C[i][k] != INF && C[k][j] != INF)
                if(C[i][j] > C[i][k] + C[k][j]){
                    C[i][j] = C[i][k] + C[k][j];
                    drum[i][j] = k;
                }
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
            if(C[i][j] == INF) fout << 0 << ' ';
            else fout << C[i][j] << ' ';
        fout << '\n';
    }
    return 0;
}