Pagini recente » Cod sursa (job #1284257) | Cod sursa (job #241789) | Cod sursa (job #2013907) | Cod sursa (job #337356) | Cod sursa (job #802318)
Cod sursa(job #802318)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#include <list>
//int e_013_bfs()
int main()
{
int N, M, S;
const int MAX_N = 100000;
string in_file = "bfs.in";
string out_file = "bfs.out";
list<int> adj_lists[MAX_N + 1];
ifstream ifs;
ifs.open(in_file.c_str());
ifs>>N>>M>>S;
for (int e = 1; e <= M; e++)
{
int v1, v2;
ifs>>v1>>v2;
adj_lists[v1].push_back(v2);
}
ifs.close();
int levels[MAX_N + 1];
for (int v = 1; v <= N; v++) levels[v] = -1;
list<int> queue_;
queue_.push_back(S);
levels[S] = 0;
while ( !queue_.empty() )
{
int u = queue_.front();
queue_.pop_front();
for (list<int>::iterator it = adj_lists[u].begin(); it != adj_lists[u].end(); it++)
{
int v = *it;
if (levels[v] < 0)//no yet processed
{
//put v in queue
queue_.push_back(v);
//update the level
levels[v] = levels[u] + 1;
}
}
}
ofstream ofs(out_file.c_str());
for (int v = 1; v <= N; v++) ofs<<levels[v]<<" ";
ofs.close();
return 0;
}