Cod sursa(job #1737214)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 3 august 2016 15:45:29
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <climits>
#include <queue>
#define nmax 105
using namespace std;
short a[nmax][nmax];
short d[nmax];
bool viz[nmax];
struct nod{short c,v;};
class pror
{
    public: bool operator() (const nod &t1, const nod &t2)
    {
        return t1.c>t2.c;
    };
};
priority_queue < nod , vector <nod> , pror > q;
void dij(short n)
{
    nod x,y;short i;
    while (!q.empty())
    {
        x=q.top();q.pop();
        for (i=1;i<=n&&(!viz[x.v]);i++)
        {
            if (a[x.v][i])
            {
                if (d[i]>d[x.v]+a[x.v][i])
                {
                    d[i]=d[x.v]+a[x.v][i];
                    y.v=i;y.c=d[i];q.push(y);
                }
            }
        }
        viz[x.v]=1;
    }
}
int main()
{
    ifstream f("royfloyd.in");
    ofstream g("royfloyd.out");
    short i,j,k,n;nod x;
    f>>n;
    for (i=1;i<=n;i++)
    {
        d[i]=SHRT_MAX,viz[i]=0;
        for (j=1;j<=n;j++)
            f>>a[i][j];
    }
    for (i=1;i<=n;i++)
    {
        d[i]=0;
        x.c=0;x.v=i;q.push(x);
        dij(n);
        for (j=1;j<=n;j++)
        {
            if (d[j]==SHRT_MAX) d[j]=0;
            g<<d[j]<<' ';
            d[j]=SHRT_MAX,viz[j]=0;
        }
        g<<'\n';
    }
    f.close();
    g.close();
}