Pagini recente » Istoria paginii runda/oniprec/clasament | Istoria paginii runda/aminceputdeja | Cod sursa (job #1009960) | Cod sursa (job #1007392) | Cod sursa (job #1396077)
#include <fstream>
#include <iostream>
#include <vector>
#include <list>
struct Nod
{
std::vector<int> vecini;
};
std::vector<Nod> nodes(100000);
std::vector<int> length(100000,-1);
std::vector<int> visited(100000,0);
std::list< std::pair<int,int> > queue;
void bfs( int source )
{
queue.push_back( std::pair<int,int>(source,0) );
length[source] = 0;
while ( !queue.empty() )
{
std::pair<int,int> head = queue.front();
queue.pop_front();
visited[head.first] = 1;
for ( int i = 0; i < nodes[head.first].vecini.size(); ++i )
{
int nodId = nodes[head.first].vecini[i];
if ( visited[nodId] != 1 )
{
queue.push_back( std::pair<int,int>( nodId, head.second + 1 ) );
length[nodId] = head.second + 1;
visited[nodId] = 1;
}
}
}
}
int main( int argc, char* argv[] )
{
std::ifstream input("bfs.in");
std::ofstream output("bfs.out");
int n,m,s;
input >> n;
input >> m;
input >> s;
for ( int i = 0; i < m; ++i )
{
int first, second;
input >> first;
input >> second;
nodes[first].vecini.push_back(second);
}
bfs(s);
for ( int i = 1; i <= n ; ++i )
{
output << length[i] << " ";
}
input.close();
output.close();
return 0;
}