Pagini recente » Cod sursa (job #505731) | Cod sursa (job #1242999) | Cod sursa (job #1921057) | Cod sursa (job #2201709) | Cod sursa (job #2379872)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
class Graph
{
int n;
vector<vector<int>> adj;
public:
void set_n(int n)
{
this->n = n;
}
Graph(int n);
void muchie(int nod1, int nod2);
void BFS(int nod);
};
Graph::Graph(int n)
{
adj = vector<vector<int>>(n+1);
}
void Graph::muchie(int nod1, int nod2)
{
adj[nod1].push_back(nod2);
}
void Graph::BFS(int nod)
{
vector<int> dist(n+1, n+1);
queue<int> C;
dist[nod] = 0;
C.push(nod);
while(!C.empty())
{
int curr_nod = C.front();
C.pop();
for(auto k : adj[curr_nod])
if(dist[k] == n+1)
{
C.push(k);
dist[k] = dist[curr_nod]+1;
}
}
ofstream fout("bfs.out");
for(int i = 1; i <=n; i++)
if(dist[i] != n+1)
fout << dist[i] << " ";
else
fout << -1 << " ";
fout.close();
}
int main()
{
ifstream fin("bfs.in");
int n, m, sursa;
fin >> n >> m >> sursa;
Graph g(n);
g.set_n(n);
for(int i = 0; i < m; i++)
{
int x, y;
fin >> x >> y;
g.muchie(x, y);
}
fin.close();
g.BFS(sursa);
return 0;
}