Pagini recente » Cod sursa (job #1504124) | Cod sursa (job #1040031) | Cod sursa (job #2086979) | Cod sursa (job #2239714) | Cod sursa (job #2780166)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("graf.in");
ofstream g("graf.out");
class Graph{
private:
int n;
vector < vector<int> > la;
public:
Graph(int nr_noduri):n(nr_noduri), la(0){
la.resize(n+1);
}
~Graph() = default;
void add_edge(int from, int to){
la[from].push_back(to);
}
void bfs_print_dist(int start);
};
void Graph::bfs_print_dist(int start){
vector<int> dist(n+1,0);
queue<int> q;
int nod_crt;
q.push(start);
dist[start]=1;
while(!q.empty())
{
nod_crt = q.front();
q.pop();
for(auto nod_vecin: la[nod_crt])
{
if(dist[nod_vecin] == 0)
{
dist[nod_vecin] = dist[nod_crt] + 1;
q.push(nod_vecin);
}
}
}
for(int i=1;i<=n;++i)
g<<dist[i]-1<<' ';
}
int main()
{
int n,m,x;
int a,b;
f>>n>>m>>x;
Graph gr(n);
for(int i=0;i<m;++i)
{
f>>a>>b;
gr.add_edge(a,b);
}
gr.bfs_print_dist(x);
return 0;
}