Cod sursa(job #1830971)

Utilizator aditzu7Adrian Capraru aditzu7 Data 17 decembrie 2016 11:54:43
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <iostream>
using namespace std;
FILE*f=fopen("bfs.in","r");
FILE*g=fopen("bfs.out","w");
int nr[100001],q[1000001],viz[100001],x,y,i,j,n,m,s;
struct nod{
int inf;
nod *urm;

}*v[1000001],*c;

void adaugare(nod *&prim,int x){
    nod *nou;
    nou=new nod;
    nou->inf=x;nou->urm=NULL;
    if(prim==NULL) prim=nou;
    else {nou->urm=prim,prim=nou;}
}
void BF(int i){
    nod *c;
    int j,ss=0,p=1,u=1;
    //q[1]=i;
 viz[i]=1;
 nr[i]=0;
 int t;
q[1]=i;nr[1]=-1;
 while (p<=u){
    //if(viz[p]==0)
    ss++;
//int  tt=ss-1;
 t=q[p];
    for(c=v[t];c;c=c->urm){
          //  tt++;
   if(!viz[c->inf])
    {u++;
    q[u]=c->inf;
    if(nr[c->inf]==-1)nr[c->inf]=ss;
   viz[c->inf]=1;
    }

 }
 p++;
 }
}
int main()
{
fscanf(f,"%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++) nr[i]=-1;
for(i=1;i<=m;i++){

fscanf(f,"%d%d",&x,&y);
  if(x!=y) adaugare(v[x],y);



}
BF(s);
for(i=1;i<=n;i++)
    if(nr[i]<=n)fprintf(g,"%d ",nr[i]);

    fclose(f);
    fclose(g);

    return 0;
}