Pagini recente » Cod sursa (job #1532680) | Monitorul de evaluare | Cod sursa (job #2869005) | Cod sursa (job #1493417) | Cod sursa (job #248147)
Cod sursa(job #248147)
#include<stdio.h>
#include<queue.h>
#define MAX_NODURI 100000
#define MAX_ARCE 1000000
int n, m, s; //numarul de noduri, numarul de muchii, nodul de plecare
int* la[MAX_NODURI + 1];
int nr_vecini[MAX_NODURI + 1];
void citeste_date()
{
freopen("bfs.in", "r", stdin);
scanf("%d%d%d\n", &n, &m, &s);
int i;
int arce[MAX_ARCE][2];
for(i=0;i<m;++i)
{
scanf("%d%d\n", &arce[i][0], &arce[i][1]);
++nr_vecini[arce[i][0]];
}
for(i=1;i<=n;++i)
{
la[i] = new int[nr_vecini[i] + 1];
la[i][0] = 0;
int x, y;
for(i=0;i<m;++i)
{
x = arce[i][0];
y = arce[i][1];
la[x][0]++;
la[x][la[x][0]] = y;
}
fclose(stdin);
}
int d[MAX_NODURI];
void parcurgere_latime(int sursa)
{
int i, e, v;
for(i = 1; i <= n; ++i) d[i] = -1;
d[sursa] = 0;
queue<int> q;
q.push(sursa);
while(!q.empty())
{
e = q.front();
q.pop();
for(i=1;i<=la[e][0];++i)
{
v = la[e][i];
if(d[v] == -1)
{
d[v] = d[e] + 1;
q.push(v);
}
}
}
}
void scrie_rezultat()
{
freopen("bfs.out", "w", stdout);
for(int i = 1;i<=n;++i) printf("%d ", d[i]);
printf("\n");
fclose(stdout);
}
int main()
{
citeste_date();
parcurgere_latime(s);
scrie_rezultat();
return 0;
}