Pagini recente » Cod sursa (job #1524012) | Cod sursa (job #1780362) | Cod sursa (job #661135) | Cod sursa (job #1002529) | Cod sursa (job #2907426)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
#define MAX 100001
int N,M,S,x,y,i,j,l;
vector <int> lista_vecini[MAX];
int G[MAX], coada_noduri[MAX], Cost[MAX];
void citire()
{
f >> N >> M >> S;
for (i = 1; i <= M; i++)
{
f >> x >> y;
lista_vecini[x].push_back(y);
}
}
void BFS(int nod)
{
memset(Cost, -1, sizeof(Cost));
l = 1;
Cost[nod] = 0;
coada_noduri[l] = nod;
for (i=1; i<=l; i++)
for (j=0; j < G[coada_noduri[i]]; j++)
if (Cost[lista_vecini[coada_noduri[i]][j]] == -1)
{
// adaug vecinii in coada si calculez costul
coada_noduri[++l] = lista_vecini[coada_noduri[i]][j];
Cost[coada_noduri[l]] = Cost[coada_noduri[i]] + 1;
}
}
int main()
{
citire();
for (i=1; i<=N; i++)
G[i] = lista_vecini[i].size();
BFS(S);
for (i=1; i<=N; i++)
g<<Cost[i]<<" ";
return 0;
}