Pagini recente » Monitorul de evaluare | Cod sursa (job #2271809) | Cod sursa (job #1370780) | Cod sursa (job #1861775) | Cod sursa (job #1115792)
#include <fstream>
#define NMax 100001
using namespace std;
struct NOD {
int key;
NOD *next;
};
NOD *start[NMax];
bool vis[NMax];
int main()
{
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n, m, i, j, s, c, dist[NMax], queue[NMax];
NOD *p;
fin >> n >> m >> s;
for(c=1 ; c<=m ; ++c)
{
fin >> i >> j;
p = new NOD;
p->key = j;
p->next = start[i];
start[i] = p;
}
fin.close();
vis[s] = true;
queue[1] = s;
i = j = 1;
while(i <= j)
{
p = start[queue[i]];
while(p)
{
if(! vis[p->key])
{
vis[p->key] = true;
queue[++j] = p->key;
dist[p->key] = dist[queue[i]] + 1;
}
p = p->next;
}
++i;
}
for(i=1 ; i<=n ; ++i)
fout << (vis[i] ? dist[i] : -1) << ' ';
fout.close();
return 0;
}