Cod sursa(job #1316055)

Utilizator niculescuteodorNiculescu Teodor Vicentiu niculescuteodor Data 13 ianuarie 2015 14:42:40
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.7 kb
#include <iostream>
#include <fstream>

using namespace std;

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

// algrotimul afla distanta cea mai scurta de la s la toate punctele (inslusiv la sine)

int n,s,lista [10001][10001],pas,sf,inc,parcurgere [10001],traseu [10001];
long m;

void citire ()
{
    int x,y;
    f>>n>>m>>s; // n varfuri, m arce , s varful in care trebuie sa se ajunga
    long i;
    for (i=1;i<=m;i++)
    {
        f>>x>>y;
        lista [x][0] ++; // memoreaza numarul de muchii la care se duce i
        lista [x][lista[i][0]]=y;
    }
}

void init ()
{
    int i;
    for (i=1;i<=sf;i++)
        parcurgere [i] = 0;
    for (i=1;i<=n;i++)
        traseu [i] =0;
}

void bfs (int p)
{
    int i;
    inc=1;
    sf=1;
    parcurgere [inc] =s; //
    traseu [s] = 1; // memoreaza faptul ca a trecut prin acel puncte deja si ce valoare avea atunci in el
    pas =0;
    while (inc <=sf )
    {
        int x=parcurgere [inc];
        pas = traseu [x];
        pas ++;
        for (i=1;i<=lista [x][0];i++)
                if (lista [x][i]==p)
                {
                    g << pas-1 << " ";
                    init (); // reface tot la 0
                    return ;
                }
                else
                if (traseu [lista [x][i]]==0)
                {
                    traseu [lista [x][i]] =pas;
                    sf++;
                    parcurgere [sf] = i;
                }
        inc ++;
    }
    g << -1 << " ";
    init (); // reface tot la 0
}


int main()
{
    citire ();
    int i;
    for (i=1;i<s;i++)
    bfs (i);
    g << 0 << " ";
    for (i=s+1;i<=n;i++)
    bfs (i);
    return 0;
}