Mai intai trebuie sa te autentifici.
Cod sursa(job #1177133)
Utilizator | Data | 26 aprilie 2014 11:48:07 | |
---|---|---|---|
Problema | BFS - Parcurgere in latime | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.06 kb |
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define maxn 100010
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
vector<int> muchii[maxn];
queue<int> stiva;
int vizitati[maxn], cost[maxn];
void citire(int &n, int &m, int &s)
{
int i,x,y;
f>>n>>m>>s;
for(i=1;i<=m;i++)
{
f>>x>>y;
muchii[x].push_back(y);
}
}
int main()
{
int n,m,s,i,distanta=0,nod;
vector<int>::iterator it;
citire(n,m,s);
stiva.push(s);
while(!stiva.empty())
{
nod = stiva.front();
vizitati[nod] = 1;
distanta = cost[nod] + 1;
stiva.pop();
for(it = muchii[nod].begin(); it != muchii[nod].end(); it++)
{
if(vizitati[*it] != 1)
{
stiva.push(*it);
cost[*it] = distanta;
}
}
}
for(i=1;i<=n;i++)
{
if(cost[i]==0 && i!=s) g<<-1<<" ";
else g<<cost[i]<<" ";
}
return 0;
}