Pagini recente » Cod sursa (job #746262) | Cod sursa (job #2124455) | Cod sursa (job #2947461) | Cod sursa (job #2735143) | Cod sursa (job #1337154)
#include <cstdio>
#include <iostream>
#include <list>
#include <map>
#include <vector>
#include <utility>
#include <deque>
using namespace std;
map<int,list<int> > arcs;
vector<int> colors;
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);
colors.at(s)=1;
while(!fifo.empty())
{
int p=fifo.front();
itM=arcs.find(p);
it=(itM->second).begin();
while(it!=(itM->second).end())
{
if(colors.at(*it)==0)
{
fifo.push_back(*it);
colors.at(*it)=1;
distances.at(*it)=distances.at(p)+1;
}
it++;
}
colors.at(p)=2;
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(-1);
colors.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)
{
if(distances.at(i)==-1 && s!=i)
{
printf("%d ",distances.at(i));
}
else
{
printf("%d ",distances.at(i)+1);
}
}
printf("\n");
return 0;
}