Cod sursa(job #1263934)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 15 noiembrie 2014 11:59:47
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

char vizitat[100001];
int coada[100001],distanta[100001],start,stop;
int n,m,s;

struct nod{
int val;
struct nod *next;
};

struct nod noduri[100001];
struct nod* capat[100001];

int main()
{
 freopen("bfs.in","r",stdin);
 freopen("bfs.out","w",stdout);
 //freopen("a.in","r",stdin);
 //freopen("a.out","w",stdout);
scanf("%d %d %d",&n,&m,&s);


int a,b;
//struct nod *p=(struct nod*)malloc(8);
struct nod *p;
for(int i=1; i<=n; i++)capat[i]=&noduri[i];


for(int i=1; i<=m; i++)
{
scanf("%d %d",&a,&b);

capat[a]->next=(struct nod*)malloc(8);
capat[a]=capat[a]->next;
capat[a]->next=NULL;
capat[a]->val=b;

//p=&noduri[a];
//while(p->next)p=p->next;
//p->next=(struct nod*)malloc(8);
//p=p->next;
//p->next=NULL;
//p->val=b;

}

start=stop=1;
coada[stop]=s;
vizitat[s]='1';
while(start<=stop)
{

    p=&noduri[coada[start]];
    while(p->next)
    {
        p=p->next;
        if(vizitat[p->val]!='1'){stop++; vizitat[p->val]='1'; coada[stop]=p->val; distanta[p->val]=distanta[coada[start]]+1;
                                }

    }
    start++;

}

for(int i=1; i<=n; i++)if(!distanta[i] && i!=s)printf("-1 "); else printf("%d ",distanta[i]);


    return 0;
}