Pagini recente » Cod sursa (job #3033256) | Cod sursa (job #1754822) | Cod sursa (job #269102) | Cod sursa (job #1476266) | Cod sursa (job #2438215)
#include<cstdio>
#define MAX_N 100000
using namespace std;
struct node {
int val;
node* next;
};
node* g[MAX_N+1];
int dist[MAX_N+1], n, m, S;
int q[MAX_N+5], prim, ultim;
void insertNode(int x, int y) {
node* elem = new node;
elem->val = y;
elem->next = g[x];
g[x] = elem;
}
void readGraph() {
int i, x, y;
FILE* fin = fopen("bfs.in","r");
fscanf(fin,"%d%d%d",&n,&m,&S);
for(i = 0; i < m; i++) {
fscanf(fin,"%d%d",&x,&y);
insertNode(x,y);
}
fclose(fin);
}
void BFS(int source) {
int i, nod;
node* p;
for(i = 1; i <= n; i++)
dist[i] = -1;
dist[source] = 0;
prim = ultim = 0;
q[prim] = source;
while(prim <= ultim) {
nod = q[prim++];
p = g[nod];
while(p != NULL) {
if(dist[p->val] == -1) {
dist[p->val] = 1 + dist[nod];
q[++ultim] = p->val;
}
p = p->next;
}
}
}
void printDistances() {
FILE* fout = fopen("bfs.out","w");
for(int i = 1; i <= n; i++)
fprintf(fout,"%d ",dist[i]);
fprintf(fout,"\n");
fclose(fout);
}
int main() {
readGraph();
BFS(S);
printDistances();
return 0;
}