Pagini recente » Cod sursa (job #1347146) | Cod sursa (job #1431987) | Cod sursa (job #1980838) | Cod sursa (job #1548239) | Cod sursa (job #2483038)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#define MAXN 100005 //maximum accepted nodes
#define MAXM 1000005 //maximum accepted edges
using namespace std;
vector<int> neighbours[MAXN]; //lists of neighbours of each node
int m, n, startNode, dist[MAXN]; //m - no of edges, n - no of nodes
queue<int> q;
ifstream f("bfs.in");
ofstream g("bfs.out");
void InitializeDistances()
{
for (int i = 0; i < n; ++i)
{
dist[i] = -1;
}
dist[startNode] = 0;
}
void ReadData()
{
int n1, n2;
f >> n >> m >> startNode;
for (int i = 0; i < m; ++i)
{
f >> n1 >> n2;
neighbours[n1 - 1].push_back(n2 - 1);
}
startNode = startNode - 1;
}
void FindDistances()
{
q.push(startNode);
while (!q.empty())
{
int currentNode = q.front();
q.pop();
for (int i = 0; i < neighbours[currentNode].size(); ++i)
{
if (dist[neighbours[currentNode][i]] == -1)
{
q.push(neighbours[currentNode][i]);
dist[neighbours[currentNode][i]] = dist[currentNode] + 1;
}
}
}
}
void ShowData()
{
for (int i = 0; i < n; ++i)
{
g << dist[i] << ' ';
}
}
int main()
{
ReadData();
InitializeDistances();
FindDistances();
ShowData();
}