Cod sursa(job #697453)

Utilizator algotrollNume Fals algotroll Data 29 februarie 2012 09:18:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<cstdio>
#include<vector>
#include<queue>
#define _NMAX 100010
#define _MMAX 1000010
using namespace std;

int nN, nM;
vector<int > lAd[_NMAX];
int dist[_NMAX];

void bfs(int);
int main()
{
    FILE *fin = fopen ("bfs.in", "r");
    int source;
    fscanf(fin, "%d %d %d", &nN,&nM,&source);
    for (int i=1; i<=nM; i++)
    {
        int nod1, nod2;
        fscanf (fin, "%d %d", &nod1, &nod2);
        lAd[nod1].push_back(nod2);
    }
    bfs(source); //dist[]
    FILE *fout = fopen ("bfs.out", "w");
    for (int i=1;i<=nN;i++)
        fprintf(fout, "%d ", dist[i]);
    return 0;
}

bool in_q[_NMAX];
void bfs(int source)
{
    for (int i=1;i<=nN;i++) dist[i]=-1;
    dist[source]=0;
    queue<int > q;
    q.push(source); in_q[source]=1;
    while (!q.empty())
    {
        int cur=q.front(); q.pop();
        for (int i=0;i<lAd[cur].size();i++)
        {
            int veccur=lAd[cur].at(i);
            if (in_q[veccur]) continue;
            dist[veccur]=dist[cur]+1;
            q.push(veccur);
            in_q[veccur]=1;
        }
    }

}