Pagini recente » Borderou de evaluare (job #2712714) | Cod sursa (job #484444) | Borderou de evaluare (job #1564408) | Borderou de evaluare (job #1585228) | Cod sursa (job #1784513)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define INF numeric_limits<int>::max()
#define int64 long long
#define lsb(x) (-x)&(x)
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
vector<int> bfs(vector< vector<int> > adj,int start,int n)//graph, start node and number of vertices of the graph
{
queue<int> Q;
vector<int> dist;
dist=vector<int> (n+1,-1);
dist[start]=0;
Q.push(start);
while(!Q.empty())
{
int v=Q.front();
Q.pop();
for(auto it: adj[v])
if(dist[it] > dist[v]+1 || dist[it]==-1)
{
dist[it]=dist[v]+1;
Q.push(it);
}
}
return dist;
}
int main()
{
int n,m,start;
vector< vector<int> > adj;
in>>n>>m>>start;
adj=vector< vector<int> > (n+1);
for(;m;m--)
{
int x,y;
in>>x>>y;
adj[x].push_back(y);
//adj[y].push_back(x);
}
vector<int> dist=bfs(adj,start,n);
for(int i=1;i<=n;i++)
out<<dist[i]<<' ';
out<<'\n';
return 0;
}