Pagini recente » Cod sursa (job #2845146) | Cod sursa (job #2792282) | Cod sursa (job #2872417) | Cod sursa (job #2860512) | Cod sursa (job #3042033)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
bool vizitat[1000];
queue <int> coada;
vector <int> graf[10000];
int noduri,muchii,start;
vector <int> cost;
void citire()
{
f>>noduri>>muchii>>start;
cost.resize(noduri+1);
for(int i=0;i<muchii;i++)
{
int x,y;
f>>x>>y;
graf[x].push_back(y);
}
for(int i=1;i<=noduri;i++)
cost[i] = -1;
cost[start] = 0;
}
/*
5 7 2
1 2
2 1
2 2
3 2
2 5
5 3
4 5
graf:
1: 2
2: 1 2 5
3: 2
4: 5
5: 3
*/
void BFS(int start)
{
coada.push(start);
vizitat[start] = true;
while(!coada.empty())
{
int nodCurent = coada.front();
coada.pop();
for(auto vecin:graf[nodCurent])
{
if(vizitat[vecin] == false)
{
vizitat[vecin] = true;
coada.push(vecin);
cost[vecin] = cost[nodCurent] + 1;
}
}
}
}
int main()
{
citire();
BFS(start);
for(int i=1;i<=noduri;i++)
g<<cost[i]<<" ";
return 0;
}