Pagini recente » Cod sursa (job #1932854) | Cod sursa (job #548072) | Cod sursa (job #60536) | Cod sursa (job #1125960) | Cod sursa (job #1932590)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin ("bfs.in");
ofstream cout ("bfs.out");
class GrafNeorientat
{
int nrNoduri, nrMuchii, nodStart;
vector<int> muchii[100001];
public:
int GetNrNoduri()
{
return nrNoduri;
}
int GetNrMuchii()
{
return nrMuchii;
}
int GetNodStart()
{
return nodStart;
}
void CitesteGraf()
{
cin >> nrNoduri >> nrMuchii >> nodStart;
for(int i = 1; i <= nrMuchii; ++i)
{
int nod1, nod2;
cin >> nod1 >> nod2;
muchii[nod1].push_back(nod2);
// muchii[nod2].push_back(nod1);
}
}
vector<int> BFS()
{
queue<int> q;
q.push(nodStart);
vector<int> dist;
for(int i = 0 ; i <= nrNoduri; ++i)
{
dist.push_back(0);
}
while(!q.empty())
{
int nod = q.front();
for(int i = 0; i < muchii[nod].size(); ++i)
{
int vecin = muchii[nod][i];
if(vecin == nodStart)
{
continue;
}
if(dist[vecin] == 0)
{
q.push(vecin);
dist[vecin] = dist[nod] + 1;
}
}
q.pop();
}
return dist;
}
void DFS()
{
}
void ComponenteConexe()
{
}
void MatriceaDrumurilor()
{
}
};
int main()
{
GrafNeorientat graf;
graf.CitesteGraf();
vector<int> dist = graf.BFS();
for(int i = 1; i <= graf.GetNrNoduri(); ++i){
if(dist[i] != 0 || i == graf.GetNodStart())
cout << dist[i] << " ";
else
cout << "-1 ";
}
return 0;
}