Pagini recente » Cod sursa (job #667239) | Cod sursa (job #397871) | Cod sursa (job #68616) | Cod sursa (job #259514) | Cod sursa (job #1337156)
#include <cstdio>
#include <iostream>
#include <list>
#include <map>
#include <vector>
#include <utility>
#include <deque>
using namespace std;
map<int,list<int> > arcs;
vector<int> distances;
int read()
{
int n=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
{
n=(n<<1)+(n<<3)+c-'0';
c=getchar();
}
return n;
}
void bfs(int s,int n)
{
deque<int> fifo;
list<int>::iterator it;
map<int,list<int> >::iterator itM;
fifo.push_back(s);
distances.at(s)=1;
while(!fifo.empty())
{
int p=fifo.front();
itM=arcs.find(p);
it=(itM->second).begin();
while(it!=(itM->second).end())
{
if(!distances.at(*it))
{
fifo.push_back(*it);
distances.at(*it)=distances.at(p)+1;
}
it++;
}
fifo.pop_front();
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
map<int, list<int> >::iterator it;
int n,m,s,a,b;
n=read();
m=read();
s=read();
for(int i=0; i<=n; ++i)
{
distances.push_back(0);
}
for(int i=1; i<=m; ++i)
{
a=read();
b=read();
it=arcs.find(a);
if(it!=arcs.end())
{
it->second.push_back(b);
}
else
{
list<int> listA;
listA.push_back(b);
arcs.insert(make_pair(a,listA));
}
}
bfs(s,n);
for(int i=1; i<=n; ++i)
{
printf("%d ",distances.at(i) -1);
}
printf("\n");
return 0;
}