Cod sursa(job #1111349)

Utilizator dascalutudorDascalu Tudor dascalutudor Data 18 februarie 2014 20:11:51
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
using namespace std;
const int Nmax=100001;
const int Mmax=1000001;
unsigned short mat[Nmax][Nmax/16];
int n,m,pi,ps,ns,coada[Nmax], d[Nmax];
ifstream in("bfs.in");
ofstream out("bfs.out");

void setmat(int a, int b)
{    unsigned short col,bit,masca=32768;
    col=b/16;
    bit=b%16;
    masca=masca>>bit;
    mat[a][col]=mat[a][col]|masca;
}
int getmat(int a,int b)
{   unsigned short col,bit,masca=32768;
    col=b/16;
    bit=b%16;
    masca=masca>>bit;
    masca=masca & mat[a][col];
    if(masca>0) return 1;
    else return 0;

    }
void bfs(int ns)
{   int i;
    pi=1;
    ps=1;
    coada[pi]=ns;

    setmat(0,ns);
    while(pi<=ps)
    {
        for(i=1;i<=n;i++)
            if(getmat(0,i)==0)
                if(getmat(coada[pi],i)==1)
                {
                    d[i]=d[coada[pi]]+1;
                    ps++;
                    coada[ps]=i;
                    setmat(0,i);
                }
        pi++;
    }
}
int main()
{    int i,a,b;
    in>>n>>m>>ns;
    for(i=1;i<=m;i++)
    {   in>>a>>b;
        setmat(a,b);

    }
   // out<<getmat(1,2)<<" "<<getmat(1,5);

    bfs(ns);
    for(i=1;i<=n;i++)
    {   if(i==ns) out<<0<<" ";
        else
        if(d[i]==0) out<<-1<<" ";
       else out<<d[i]<<" ";

    }

    return 0;
}