Pagini recente » Profil CNI_Stamatin_Iordache_Ciurezu | Cod sursa (job #2171446) | Cod sursa (job #1781098) | Cod sursa (job #1349938) | Cod sursa (job #2780164)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dfs.in");
ofstream fout("dfs.out");
const int NMAX = 100001;
class graf{
vector < int > Ad[NMAX];
int N;
public:
graf(int n):N(n){}
void addEdge(int x, int y){
Ad[x].push_back( y );
}
void DFS( int nod, bool vis[] ){
vis[nod] = 1;
for( int i = 0; i < Ad[nod].size(); ++i ){
int w = Ad[nod][i];
if( vis[w] == 0 )DFS(w,vis);
}
}
void BFS( int nod ){
queue < int > Q;
int dist[NMAX] = {0};
Q.push(nod);
int x;
while( !Q.empty() ){
x = Q.front();
Q.pop();
for( int i = 0; i < Ad[x].size(); ++i ){
int w = Ad[x][i];
if( dist[w] == 0 && w != x && w != nod ){
dist[w] = dist[x] + 1;
Q.push(w);
}
}
}
for( int i = 1; i <= N; ++i )
if( dist[i] != 0 || i == nod )fout << dist[i] << ' ';
else fout << "-1 ";
}
int nrComponenteConexe(){
int nr = 0;
bool vis[NMAX] = {0};
for( int i = 1; i <= N; ++i )
if( vis[i] == 0 ){
DFS(i,vis);
nr++;
}
return nr;
}
};
int main()
{
int N, M, S, x, y;
fin >> N >> M >> S;
graf G(N);
for( int i = 1; i <= M; ++i ){
fin >> x >> y;
G.addEdge(x,y);
}
G.BFS(S);
return 0;
}