Pagini recente » Cod sursa (job #604993) | Cod sursa (job #1837400) | Cod sursa (job #1579620) | Cod sursa (job #2225842) | Cod sursa (job #1990897)
#include <fstream>
#include <list>
#include <vector>
#include <queue>
using namespace std;
class Graph {
int V;
list<int> *adj;
void recursiveDFS(int u);
public:
Graph(int V);
void addEdge(int u, int v);
void breadthFirstSearch(int src);
};
Graph::Graph(int V) {
this->V = V;
adj = new list<int>[V];
}
void Graph::addEdge(int u, int v) {
adj[u].push_back(v);
// adj[v].push_back(u);
}
void Graph::breadthFirstSearch(int src) {
ofstream fout("bfs.out");
vector<bool> visited(V, false);
vector<int> d(V, 0);
queue<int> Q;
Q.push(src);
while (!Q.empty()) {
int u = Q.front();
Q.pop();
visited.at(u) = true;
list<int>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); i++) {
if (visited.at(*i) == false) {
Q.push(*i);
d.at(*i) = d.at(u) + 1;
}
}
}
for (int j = 0; j < V; j++) {
if (d.at(j) == 0 && j != src)
fout << "-1 ";
else
fout << d.at(j) << " ";
}
}
int main(void) {
int N, M, src;
ifstream fin("bfs.in");
fin >> N >> M >> src;
Graph g(N);
for (int i = 1; i <= M; i++) {
int u, v;
fin >> u >> v;
if (u != v)
g.addEdge(u - 1, v - 1);
}
g.breadthFirstSearch(src - 1);
}