Cod sursa(job #1499884)

Utilizator grozassGroza Septimiu grozass Data 11 octombrie 2015 11:50:21
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("royfloyd.in");
ofstream g("royfloyd.out");

unsigned short n,i,j,a[256][256],dist[256][256],k,p,q,v[5000],ii;

void read()
{
    f>>n;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            f>>a[i][j];
        }
}

void dijkstra(int ii)
{
    for(i=1;i<=n;i++) dist[ii][i]=60000;
    dist[ii][ii]=0; v[1]=ii; q=0; k=1; p=0;

    do
    {
        for(i=q+1;i<=q+k;i++)
            for(j=1;j<=n;j++)
                if(dist[ii][j]>dist[ii][v[i]]+a[v[i]][j] && a[v[i]][j]>0)
                {
                    dist[ii][j]=dist[ii][v[i]]+a[v[i]][j];
                    p++;
                    v[q+k+p]=j;
                }

        q+=k; k=p; p=0;
    }while(k>0);
}

void write()
{
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++) g<<dist[i][j]<<" ";
        g<<endl;
    }
    g.close();
}

int main()
{
    read();
    for(ii=1;ii<=n;ii++) dijkstra(ii);
    write();
    return 0;
}