Pagini recente » Cod sursa (job #9642) | Cod sursa (job #2421394) | Cod sursa (job #2381757) | Cod sursa (job #1935355) | Cod sursa (job #1051765)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
#define nmax 100005
ifstream f("bfs.in");
ofstream g("bfs.out");
struct graf{
int nod;
graf *urm;
};
int n, m, sursa, dist[nmax];
graf *gf[nmax];
void adauga(int x, int y){
// x -> y;
graf *newNod = new graf;
// initial pt fiecare nod lista de vecini va avea un pointer catre NULL;
//acum dupa ce voi termina va pointa catre newNod care la randul lui va avea un pointer catre ce ponta inainte graful
newNod->nod = y;
newNod->urm = gf[x];
gf[x] = newNod;
}
void citeste(){
f >> n >> m >> sursa;
for(int i=1; i<=m; ++i){
int x, y;
f >> x >> y;
adauga(x, y);
}
}
void rezolva(){
for(int i=1; i<=n; ++i) dist[i] = -1;
dist[sursa] = 0;
queue<int> q;
q.push(sursa);
for(; !q.empty(); ){
int nod = q.front(); q.pop();
for(graf *p = gf[nod]; p != NULL; p = p -> urm){
if (dist[ p->nod ] == -1){
dist[ p->nod ] = dist[nod] + 1;
q.push( p->nod );
}
}
}
for(int i=1; i<=n; ++i) g << dist[i] << " "; g << "\n";
//for(int i=1; i<=n; ++i) cout << dist[i] << " "; cout << "\n";
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}