Pagini recente » Cod sursa (job #2842307) | Cod sursa (job #355361) | Cod sursa (job #1098291) | Cod sursa (job #1484216) | Cod sursa (job #972986)
Cod sursa(job #972986)
#include <cstdio>
#include <algorithm>
#include <queue>
#define x first
#define y second
#define mp make_pair
FILE *f=fopen("bfs.in","r");
FILE *g=fopen("bfs.out","w");
using namespace std;
queue <int> q;
pair <int,int> vrtx[1000001];
struct nod{
int v;
nod *next;
};
typedef nod *lista;
char used[100001];
int n,m,S,cost[100001];
lista lv[100001];
void get_GRAPH()
{
int i,a,b;
lista p;
fscanf(f,"%d%d%d",&n,&m,&S);
for(i=1;i<=m;++i)
{
fscanf(f,"%d%d",&a,&b);
vrtx[i]=mp(a,b);
}
sort(vrtx+1,vrtx+m+1);
for(i=1;i<=m;++i)
if((vrtx[i-1].x!=vrtx[i].x||vrtx[i-1].y!=vrtx[i].y)&&vrtx[i].x!=vrtx[i].y)
{p=new nod;p->v=vrtx[i].y;p->next=lv[vrtx[i].x];lv[vrtx[i].x]=p;}
}
void BFS()
{
lista p;
q.push(S);used[S]=1;
while(!q.empty())
{
for(p=lv[q.front()];p;p=p->next)
if(!used[p->v])
{
used[p->v]=1;
cost[p->v]=cost[q.front()]+1;
q.push(p->v);
}
q.pop();
}
}
void PRINT()
{
int i;
for(i=1;i<=n;++i)
if(cost[i]||i==S)fprintf(g,"%d ",cost[i]);
else fprintf(g,"-1 ");
}
int main()
{
get_GRAPH();
BFS();
PRINT();
return 0;
}