Cod sursa(job #1339740)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 11 februarie 2015 08:45:33
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
#include <vector>
struct str
{
       int nod;
       int ct;
       int tatnod;
}qu[400010];
int val[100010];
int ps;
std::vector<int> *adj;
int n,m,s;
int pt;
void bfs(int act)
{
     if(act==ps) return;
     std::vector<int>::iterator it;
     for(it=adj[qu[act].nod].begin();it!=adj[qu[act].nod].end();++it)
     {
           if(val[*it]==-1)
           {
                qu[ps].tatnod=qu[act].nod;
                qu[ps].nod=*it;
                qu[ps].ct=qu[act].ct+1;
                val[*it]=qu[ps].ct;
                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);
    }
    for(int i=1;i<=n;i++) val[i]=-1;
    qu[0].tatnod=-1;
    ps=1; 
    qu[0].nod=s;
    qu[0].ct=0;
    bfs(0);
    val[s]=0;
    for(int i=1;i<=n;i++)
    {
            printf("%d ",val[i]);
    }
}