Pagini recente » Cod sursa (job #1714687) | Cod sursa (job #431583) | Cod sursa (job #1656068) | Cod sursa (job #342196) | Cod sursa (job #1570972)
#include <iostream>
#include <fstream>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
class Digraph
{
private:
vector<vector<int>> edges;
int nodes;
public:
Digraph(int v)
{
nodes = v;
for (int i = 0; i < nodes; i++)
edges.push_back(vector<int>());
}
void addEdge(int v, int w)
{
edges[v].push_back(w);
}
vector<int> adj(int v)
{
return edges[v];
}
int size() const
{
return nodes;
}
};
int main()
{
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int vertices, arcs, s;
fin >> vertices >> arcs >> s;
Digraph *g = new Digraph(vertices);
s--;
int v, w;
while (fin >> v >> w)
{
g->addEdge(v - 1, w - 1);
}
queue<pair<int, int>> q;
int marked[vertices];
fill_n(marked, vertices, -1);
q.push(make_pair(s, 0));
while (!q.empty())
{
marked[q.front().first] = q.front().second;
int startValue = q.front().second;
vector<int> tmp = g->adj(q.front().first);
for (auto it = tmp.begin(); it != tmp.end(); it++)
{
if (marked[*it] == -1)
q.push(make_pair(*it, startValue + 1));
}
q.pop();
}
for (int i = 0; i < vertices; i++)
fout << marked[i] << " ";
fout << endl;
fout.close();
fin.close();
return 0;
}