Cod sursa(job #1076356)

Utilizator calin13Calin Nicolau calin13 Data 10 ianuarie 2014 01:58:06
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
#include <bitset>
#include <list>
#include <algorithm>
#include <string>
using namespace std;
#define INF 0xFFFFFFFF
unsigned int n;
unsigned int a[105][105];
class cApp
{
public:
    cApp(const char *filename)
    {
        char inFile[30];
        strcpy(inFile, filename);
        strcat(inFile, ".in");
        char outFile[30];
        strcpy(outFile, filename);
        strcat(outFile, ".out");
        f.open(inFile, ios_base::in);
        g.open(outFile, ios_base::out);
    }
    ~cApp()
    {
        f.close();
        g.close();
    }
    void read()
    {
        f >> n;
        unsigned int cost;
        for (unsigned int i = 1; i <= n; ++i)
            for (unsigned int j = 1; j <= n; ++j)
            {
                f >> cost;
                a[i][j] = cost;
            }
    }
    void write()
    {
        for (unsigned int i = 1; i <= n; ++i)
        {
            for (unsigned int j = 1; j <= n; ++j)
                g << a[i][j] << " ";
            g << "\n";
        }
    }
    fstream f, g;
};
void roy_floyd()
{
    unsigned 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])
                    a[i][j] = a[i][k] + a[k][j];
}
int main()
{
    cApp app("royfloyd");
    app.read();
    roy_floyd();
    app.write();
    return 0;
}