Pagini recente » Cod sursa (job #320288) | Cod sursa (job #2234296) | Cod sursa (job #536555) | Cod sursa (job #2328283) | Cod sursa (job #1076335)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
#include <bitset>
#include <list>
#include <algorithm>
#include <string>
using namespace std;
#define INF 0xFFFFFFFF
unsigned int n, m , s;
vector< list<unsigned int> > a(100005);
vector< unsigned int > d(100005);
class cApp
{
public:
cApp(const char *filename)
{
char inFile[30];
strcpy(inFile, filename);
strcat(inFile, ".in");
char outFile[30];
strcpy(outFile, filename);
strcat(outFile, ".out");
f.open(inFile, ios_base::in);
g.open(outFile, ios_base::out);
}
~cApp()
{
f.close();
g.close();
}
void read()
{
f >> n >> m >> s;
unsigned int x, y;
for (unsigned int i = 1; i <= m; ++i)
{
f >> x >> y;
a[x].push_front(y);
}
}
void write()
{
for(unsigned int i = 1; i <= n; ++i)
if (d[i] == INF)
g << -1 << " ";
else
g << d[i] << " ";
}
fstream f, g;
};
void bfs()
{
queue< unsigned int > q;
bitset<100005> viz;
for (unsigned int i = 1; i <= n; ++i)
d[i] = INF;
viz[s] = 1;
d[s] = 0;
q.push(s);
while (!q.empty())
{
for(list<unsigned int>::iterator it = a[ q.front() ].begin();
it != a[ q.front() ].end();
++it)
if ( !viz[*it] )
{
viz[*it] = 1;
d[*it] = d
[q.front()] + 1;
q.push(*it);
}
q.pop();
}
}
int main()
{
cApp app("bfs");
app.read();
bfs();
app.write();
return 0;
}