Cod sursa(job #1470258)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 10 august 2015 16:58:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define NMAX 100007
using namespace std;
FILE *fin, *fout;
struct type
{
    int nod;
    int pas;
}tmp, tmpq;
vector<int> adj[NMAX];
queue<type> coada;
int n, m, s, x, y, ans[NMAX], sze;
int main()
{
    fin = freopen("bfs.in", "r", stdin);
    fout = freopen("bfs.out", "w", stdout);
    memset(ans, -1, sizeof(ans));
    scanf("%d %d %d", &n, &m, &s);
    for(int i = 1; i<= m; ++i)
    {
        scanf("%d %d", &x, &y);
        adj[x].push_back(y);
    }
    tmp.nod = s;
    tmp.pas = 0;
    coada.push(tmp);
    for( ; !coada.empty(); )
    {
        tmp = coada.front();
        if(ans[tmp.nod] == -1) ans[tmp.nod] = tmp.pas;
        else
        {
            coada.pop();
            continue;
        }
        sze = adj[tmp.nod].size();
        tmpq.pas = tmp.pas + 1;
        for(int i = 0; i< sze; ++i)
        {
            if(adj[tmp.nod][i] == tmp.nod) continue;
            tmpq.nod = adj[tmp.nod][i];
            coada.push(tmpq);
        }
        coada.pop();
    }
    for(int i = 1; i<= n; ++i) printf("%d ", ans[i]);printf("\n");
    fclose(fin);
    fclose(fout);
    return 0;
}