Cod sursa(job #1333211)

Utilizator stefan1Medvichi Stefan stefan1 Data 2 februarie 2015 21:39:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#include <vector>
#define DMAX 100001

using namespace std;
FILE * fin=fopen("bfs.in", "r");
FILE * fout=fopen("bfs.out", "w");

int n, m, s;
vector<int>L[DMAX];
bool viz[DMAX];
int Q[DMAX];
int dist[DMAX];

void citire();
void BFS(int vf);
void afisare();

int main()
{
citire();
BFS(s);
afisare();
return 0;
}

void BFS(int vf)
{
int prim, ultim, i, x;
viz[vf]=1; ultim=prim=0;
Q[0]=vf;
while (prim<=ultim)
    {
        x=Q[prim++];
        for (i=0; i<L[x].size(); ++i)
            if (!viz[L[x][i]])
                {
                    dist[L[x][i]]=dist[x]+1;
                    viz[L[x][i]]=1;
                    Q[++ultim]=L[x][i];
                }
    }
}

void afisare()
{
int i;
for (i=1; i<=n; ++i)
    if (viz[i])
        fprintf(fout, "%d ", dist[i]);
        else fprintf(fout, "-1 ");
fprintf(fout, "\n");
fclose(fout);
}

void citire()
{
int i, x, y;
fscanf(fin, "%d %d %d", &n, &m, &s);
for (i=1; i<=m; ++i)
    {
        fscanf(fin, "%d %d", &x, &y);
        L[x].push_back(y);
    }
}