Cod sursa(job #1111362)

Utilizator bia423Bianca Floriana bia423 Data 18 februarie 2014 20:21:05
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
using namespace std;
const int Nmax=100001;
const int Mmax=1000000;
unsigned short mat[Nmax][Nmax/16];
int n,m,pi,ps,ns,coada[Nmax],dist[Nmax];
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 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;
}
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)
            { ps++;
                coada[ps]=i;
                setmat(0,i);
                dist[i]=dist[coada[pi]]+1;
            }pi++;

    }

}

int main()
{
    int i,a,b;
    ifstream in("bfs.in");
    ofstream out("bfs.out");
    in>>n>>m>>ns;
    for(i=1;i<=m;i++)
    {   in>>a>>b;
        setmat(a,b);}
    BFS(ns);
    for(i=1;i<=n;i++)
        if(dist[i]==0)dist[i]=-1;
        dist[ns]=0;
        for(i=1;i<=n;i++)
        out<<dist[i]<<" ";
    return 0;
}