Pagini recente » Cod sursa (job #2913533) | Cod sursa (job #1043433) | Cod sursa (job #1137237) | Cod sursa (job #1640810) | Cod sursa (job #1076245)
#include<iostream>
#include<fstream>
using namespace std;
class Node {
public:
int value;
Node *next;
Node() {
next = NULL;
value = 0;
}
~Node() {
delete next;
next = NULL;
}
};
int main(void) {
ifstream in;
ofstream out;
in.open("bfs.in");
out.open("bfs.out");
int n, m, s;
in >> n >> m >> s;
int *d = new int[n+1];
int *colour = new int[n+1];
int *stack = new int[n+1];
Node **adj = new Node*[n+1];
for(int i=0;i<=n;++i) {
adj[i] = NULL;
d[i] = -1;
colour[i] = 0;
}
while(!in.eof()) {
int start, end;
in >> start >> end;
Node *n = new Node();
n->value = end;
n->next = adj[start];
adj[start] = n;
}
int stackHead = 0;
int stackTail = 0;
d[s] = 0;
colour[s] = 1;
stack[stackTail++] = s;
while(stackHead < stackTail) {
int curent = stack[stackHead++];
Node *n = adj[curent];
while(n != NULL) {
if(colour[n->value] == 0) {
d[n->value] = d[curent]+1;
stack[stackTail++] = n->value;
colour[n->value] = 1;
}
n = n->next;
}
colour[curent] = 2;
}
for(int i = 1; i <= n; ++i)
out << d[i] << " ";
out << "\n";
delete[] d;
delete[] colour;
delete[] stack;
for(int i=0;i<=n;++i) {
Node *n = adj[i];
delete n;
}
delete[] adj;
out.close();
in.close();
return 0;
}