Pagini recente » Cod sursa (job #2741125) | Cod sursa (job #1437125) | Cod sursa (job #41999) | Cod sursa (job #3131368) | Cod sursa (job #2926452)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n;
//vector< vector<int> > listaAd;
queue<int> coada;
int prec[100001];
int S;
int noduri,muchii,x,y;
vector< vector<int> > ListaAdiacenta()
{
vector< vector<int> > listaAd(noduri+1);
for(int i=0;i<muchii;i++)
{
f>>x>>y;
listaAd[x].push_back(y);
}
return listaAd;
}
//void afisareListaAdiacenta(vector<vector<int>> &lista)
//{
// for(size_t x=1; x< lista.size();x++)
// {
// cout<<x<<": ";
// for(auto y:lista[x])
// cout<<y<<" , ";
// cout<<endl;
// }
// cout<<endl;
//}
void BFS(vector<vector<int>> &listaAdi,int N,int start)
{
vector< int > vizitate(N+1,0);
for(int i=1;i<=N;i++)
prec[i]=-1;
vizitate[start] = 1;
coada.push(start);
while( !coada.empty() )
{
int front = coada.front();
coada.pop();
for(int i = 0; i < listaAdi[front].size(); i++)
{
int vecin = listaAdi[front][i];
if( !vizitate[vecin] ) {
vizitate[ vecin ] = 1;
prec[vecin]=front;
coada.push( vecin );
}
}
}
// for(int i=1;i<=N;i++)
// cout<<i<<" = "<< prec[i]<<endl;
// cout << '\n';
while (!coada.empty())
{
coada.pop();
}
}
int SmallestPath(int start,int final)
{ int nr=0;
int nod=final;
while(prec[nod]!=-1 )
{
nr++;
nod=prec[nod];
}
if(nod!=start)nr=-1;
return nr;
}
//void dfs(int start) {
// cout << start << " ";
// viz[start] = 1;
//
// for(int i = 0; i < lists[start].size(); i++) {
// int vecin = lists[start][i];
// if( !viz[vecin] ) {
// dfs(vecin);
// }
// }
//}
int main()
{
f>>noduri>>muchii;
f>>S;
auto listaAdiacenta= ListaAdiacenta();
// afisareListaAdiacenta(listaAdiacenta);
BFS( listaAdiacenta,noduri,S);
for(int i=1;i<=noduri;i++)
g << SmallestPath(S, i) <<" ";
return 0;
}