Pagini recente » Cod sursa (job #67811) | Cod sursa (job #2852520) | Cod sursa (job #1296762) | Cod sursa (job #1248630) | Cod sursa (job #1045104)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ofstream OUT("bfs.out");
struct node
{
vector<int> vecini;
bool vizitat = false;
int cost = 0;
};
void bfs(node *noduri, int s, int n)
{
queue<node*> coada;
noduri[s].cost = 0;
coada.push(&noduri[s]);
while (coada.empty() == false)
{
node *first = coada.front();
first->vizitat = true;
coada.pop();
for (vector<int>::const_iterator iter = first->vecini.begin(); iter != first->vecini.end(); iter++)
{
if (noduri[*iter].vizitat == false)
{
coada.push(&noduri[*iter]);
noduri[*iter].cost = first->cost + 1;
}
}
}
for (int i = 1; i <= n; i++)
{
if (noduri[i].vizitat)
OUT << noduri[i].cost << " ";
else
OUT << "-1 ";
}
OUT << endl;
}
int main()
{
ifstream IN("bfs.in");
int n, m, s; IN >> n >> m >> s;
node* noduri = new node[n+1];
for (int i = 0; i < m; i++)
{
int x; IN >> x; int y; IN >> y;
noduri[x].vecini.push_back(y);
}
bfs(noduri, s, n);
return 0;
}