Pagini recente » Cod sursa (job #2152037) | Cod sursa (job #218896) | Cod sursa (job #130896) | Cod sursa (job #1695549) | Cod sursa (job #2907313)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
ifstream cin("bfs.in");
ofstream cout("bfs.out");
int nodes, edgesNr, startNode, a, b;
cin >> nodes >> edgesNr >> startNode;
vector <vector<int>> edges(edgesNr);
vector <bool> visit(nodes + 1, false);
for(int i = 0; i < edgesNr; i++)
{
cin >> a >> b;
edges[a].push_back(b);
}
vector <int> dist(nodes + 1, 999999);
dist[startNode] = 0;
vector <pair<int, int>> queue;
int currentNode = 0;
queue.push_back({startNode, 0});
while(currentNode < queue.size())
{
dist[queue[currentNode].first] = min(dist[queue[currentNode].first], queue[currentNode].second);
for(auto i : edges[queue[currentNode].first])
{
if(visit[i] == false)
queue.push_back({i, queue[currentNode].second + 1}), visit[i] = true;
}
++currentNode;
}
for(int i = 1; i <= nodes; i++)
{
cout << ((dist[i] != 999999) ? dist[i] : -1) << ' ';
}
return 0;
}