Cod sursa(job #1610741)

Utilizator BaconDroidAndrei Katona BaconDroid Data 23 februarie 2016 18:32:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
#define vmax 100001
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
struct nod
{
    int y;
    nod *urm;
};
queue<int> q;
nod *lis[vmax],*p;
int n,m,start,i,j,dist[vmax],viz[vmax],d=0;

void citire(nod *lis[])
{
    memset(dist, -1, sizeof(dist));
    memset(viz, 0, sizeof(viz));
    f>>n>>m>>start;
    while(f>>i>>j)
    {
        p = new nod;
        p->y = j;
        p->urm = lis[i];
        lis[i] = p;
    }
}

void bfs(nod *lis[], int start)
{
    q.push(start);
    dist[start] = d; viz[start] = 1;
    while(!q.empty())
    {
        for(p=lis[q.front()]; p!=NULL; p=p->urm)
            if(viz[p->y] == 0)
            {
                q.push(p->y);
                viz[p->y] = 1;
                dist[p->y] = dist[q.front()] + 1;
            }
        q.pop();
    }
}

int main()
{
    citire(lis);
    bfs(lis,start);
    for(i=1; i<=n; i++)
        g << dist[i] << ' ';
    return 0;
}