Pagini recente » Cod sursa (job #385101) | Cod sursa (job #2508438) | Cod sursa (job #1975219) | Cod sursa (job #2084722) | Cod sursa (job #475560)
Cod sursa(job #475560)
#include <fstream>
#include <vector>
using namespace std;
struct node
{
int value;
vector<node*> neighborhs;
};
int n, m, s, i;
int sel[100001];
int steps[100001];
vector<node*> nodes;
int bfsOrder[100001];
void bfs( node* aNodeToStart );
int main()
{
ifstream f("bfs.in");
ofstream g("bfs.out");
f >> n >> m >> s;
for( i = 0; i < n; i++ )
{
node* newNode = new node;
newNode->value = i;
nodes.push_back( newNode );
}
int x, y;
for( i = 0; i < m; i++ )
{
f >> x >> y;
x--;
y--;
nodes[x]->neighborhs.push_back( nodes[y] );
}
f.close();
bfs( nodes[--s] );
for( i = 0; i < n; i++ )
{
if( sel[i] )
g << steps[i] << " ";
else
g << "-1 ";
}
g << "\n";
g.close();
return 0;
}
void bfs( node* aNodeToStart )
{
int left = -1;
int right = 0;
bfsOrder[right] = aNodeToStart->value;
sel[aNodeToStart->value] = 1;
while( left < right )
{
left++;
for( i = 0; i < nodes[bfsOrder[left]]->neighborhs.size(); i++ )
{
if( !sel[nodes[bfsOrder[left]]->neighborhs[i]->value] )
{
right++;
bfsOrder[right] = nodes[bfsOrder[left]]->neighborhs[i]->value;
sel[nodes[bfsOrder[left]]->neighborhs[i]->value] = 1;
steps[nodes[bfsOrder[left]]->neighborhs[i]->value] = 1 + steps[bfsOrder[left]];
}
}
}
}