Pagini recente » Cod sursa (job #33663) | Cod sursa (job #1226405) | Cod sursa (job #138234) | Cod sursa (job #1244978) | Cod sursa (job #278281)
Cod sursa(job #278281)
#include <fstream>
using namespace std;
struct Nod {
unsigned int dest;
Nod *n;
};
Nod *graf[100001];
unsigned int N,M,S;
void BFS (unsigned int src, int dist[100001])
{
unsigned int queue[100001],*Q_push=queue,*Q_pop=queue;
char visited[100001]; memset(visited,0, sizeof(visited));
*(Q_push++) = src;
visited[src] = 1;
dist[src] = 0;
while (Q_pop < Q_push) {
unsigned int crt = *(Q_pop++);
for (Nod *nod=graf[crt]; nod; nod=nod->n)
if (!visited[nod->dest]) {
dist[nod->dest] = dist[crt]+1;
*(Q_push++) = nod->dest;
visited[nod->dest] = 1;
}
}
}
int main ()
{
unsigned int i;
ifstream in("bfs.in");
ofstream out("bfs.out");
in >> N >> M >> S;
for (i=0; i<M; ++i) {
unsigned int src;
Nod *nod = new Nod;
in >> src >> nod->dest;
nod->n = graf[src];
graf[src] = nod;
}
in.close();
int dist[100001];
for (i=1; i<=N; ++i) dist[i] = -1;
BFS(S, dist);
for (i=1; i<=N; ++i) out << dist[i] << ' ';
out << '\n';
out.close();
return 0;
}