Cod sursa(job #2276793)

Utilizator ralfd123Amariei Andrei ralfd123 Data 5 noiembrie 2018 13:29:47
Problema BFS - Parcurgere in latime Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");

int n,m,s,a[10010][10010];
#define infinit 100
int d[100010];

void citire()
{   f>>n>>m>>s; int x=0,y=0;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j) a[i][j]=infinit;
    while(m)
    {   f>>x>>y; a[x][y]=1;
        m--;
    }
}

void afis()
{   for(int i=1;i<=n;++i)
    {   for(int j=1;j<=n;++j) g<<a[i][j]<<" ";
        g<<'\n';
    }
}

void Bellman_Ford(int s)
{   int ok=0;

    for(int i=1;i<=n;++i) d[i]=infinit;
    d[s]=0;

    for(int i=1;i<=n;++i)
    {   ok=0;
        for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k)
                if( d[j] != infinit and a[j][k] != infinit )
                    if( d[k] > d[j] + a[j][k] )
                    {   d[k] = d[j] + a[j][k];
                        ok=1;
                    }
    }
}

int main()
{   citire();

    Bellman_Ford(s);

    for(int i=1;i<=n;++i)
        if( d[i] == infinit ) g<<-1<<" ";
        else g<<d[i]<<" ";

g.close();
return 0;
}