Cod sursa(job #398922)

Utilizator aldulea_cristialdulea cristi aldulea_cristi Data 19 februarie 2010 17:33:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <fstream>
#include<iostream>
#include <vector>

using namespace std;

int  * A[100001];
int c[100001],viz[100001],n,m,k,i,cost[100001];
void citeste_graf()
{    int x,y;
     ifstream f("bfs.in");

     f>>n>>m>>k;
     for(i=0;i<=n;i++)
        cost[i]=-1;

     for(int i=1;i<=n;i++)
        {
            A[i]=(int *) realloc(A[i],sizeof(int));
            A[i][0]=0;
        }

    for(int i=1;i<=m;i++)
        {
            int x,y;
            f>>x>>y;
            A[x][0]++;
            A[x]=(int *)realloc(A[x],(A[x][0]+1)*sizeof(int));
            A[x][A[x][0]]=y;
        }
     /*for(i=1;i<=n;i++)
        {
            cout<<i;
            for(int j=1;j<=A[i][0];j++)
                cout<<" "<<A[i][j]<<" ";
            cout<<endl;

        }*/
}


void bfs(int nod)
{
     int li,ls,nr_vecini;
     li=1;ls=1;
     c[li]=nod;viz[nod]=1;cost[nod]=0;

  while (li<=ls)
    {
        nr_vecini=A[c[li]][0];
        for(i=1;i<=nr_vecini;i++)

                             if (viz[A[c[li]][i]]==0)
                                  {
                                                   ls++;
                                                   c[ls]=A[c[li]][i];

                                                   viz[A[c[li]][i]]=1;
                                                   cost[A[c[li]][i]]=cost[c[li]]+1;

                                                   }
       li++;
       }

}

void afisare()
{
     ofstream g("bfs.out");
      for(i=1;i<=n;i++)
           g<<cost[i]<<" ";

      g.close();
}


int main()
{
    citeste_graf();
    bfs(k);
    afisare();
    return 0;
}