Cod sursa(job #557083)

Utilizator freakingVlad Eu freaking Data 16 martie 2011 14:14:01
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#include <stdio.h>
#define nmax 100000

int n,m,s;
int v[nmax];
vector <int> a[nmax];
queue <int> b;
void citire()
{
    FILE *in=fopen("bfs.in","r");
    fscanf(in,"%i %i %i",&n,&m,&s);
    int i,t,v;
    for(i=1;i<=m;i++)
    {
        fscanf(in,"%i %i",&t,&v);
        a[t].push_back(v);
    }
    fclose(in);
}

void parcurgere()
{
	
    b.push(s);
	v[s]=0;
    while(!b.empty())
    {
		int bfront=b.front();
        while(!a[b.front()].empty())
        {
			int aback=a[b.front()].back();
			if(bfront != aback && v[aback]==0)
			{
				b.push(a[b.front()].back());
					v[a[b.front()].back()]=v[b.front()]+1;;
            }
			a[b.front()].pop_back();
        }
		b.pop();
		v[s]=1;
    }
	v[s]=0;
}

void afisare()
{
    ofstream out("bfs.out");
    int i;
    for (i=1;i<=n;i++)
    {
		if(v[i]==0 && i!=s)
			out<<"-1 ";
		else
			out<<v[i]<<" ";
    }
	out.close();
}

int main()
{

    citire();
    parcurgere();
    afisare();
    return 0;

}