Cod sursa(job #1339736)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 11 februarie 2015 08:42:31
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <stdio.h>
#include <vector>
struct str
{
       int nod;
       int ct;
       int tatnod;
}qu[100010];
bool vis[100010];
int val[100010];
int ps;
std::vector<int> *adj;
int n,m,s;
int pt;
void bfs(int act)
{
     if(act==n) return;
     std::vector<int>::iterator it;
     for(it=adj[qu[act].nod].begin();it!=adj[qu[act].nod].end();++it)
     {
           if(*it!=qu[act].tatnod)
           {
                qu[ps].tatnod=qu[act].nod;
                qu[ps].nod=*it;
                qu[ps].ct=qu[act].ct+1;
                ps++;
           }
     }
     bfs(act+1);
     return ;
}
int main()
{
    freopen ("bfs.in","r",stdin);
    freopen ("bfs.out","w",stdout);
    scanf("%d%d%d",&n,&m,&s);
    int p1,p2;
    adj=new std::vector<int>[n+1];
    for(int i=1;i<=m;i++)
    {
            scanf("%d%d",&p1,&p2);
            adj[p1].push_back(p2);
    }
    qu[0].tatnod=-1;
    vis[s]=0;
    ps=1; 
    qu[0].nod=s;
    qu[0].ct=0;
    bfs(0);
    for(int i=1;i<ps;i++)
    {
            if(val[qu[i].nod]==0&&qu[i].nod!=s) val[qu[i].nod]=qu[i].ct;
    }
    for(int i=1;i<=n;i++)
    {
            if(val[i]==0&&i!=s) printf("-1 ");
            else printf("%d ",val[i]);
    }
}