Cod sursa(job #694824)

Utilizator stefaniaaStefania Aungurencei stefaniaa Data 28 februarie 2012 03:22:38
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>
#include <stdio.h>
using namespace std;
FILE * bfs;
ofstream g("bfs.out");
struct nod
            {
                long inf;
                nod *urm;
            };
nod *p[100003],*ultim[100003],*q;
long cost[100003],c[100003];
long i,m,n,s,x;
void creare()
{
    for (i=1;i<=m;i++)
    {
        p[i]=new nod;
        p[i]->inf=0;
        p[i]->urm=NULL;
        ultim[i]=p[i];
    }
}
void citire()
{
    long y;
    for (i=1;i<=m;i++)
    {
        fscanf(bfs,"%ld %ld",&x,&y);
        q=new nod;
        q->inf=y;
        q->urm=NULL;
        ultim[x]->urm=q;
        ultim[x]=q;

    }
}
void sterg()
{
    for (i=1;i<=m;i++)
    {
        q=p[i];
        p[i]=p[i]->urm;
        q->urm=NULL;
        delete q;
    }
}
void bf(long s)
{
    long pr,u,viz[100003];
    c[1]=s;
    viz[s]=1;
    pr=1;
    u=1;
    cost[s]=0;
    while (pr<=u)
    {
        x=c[pr];
        q=p[x];
        while (q)
        {
            if (!viz[q->inf])
            {
                u++;
                c[u]=q->inf;
                viz[q->inf]=1;
                cost[q->inf]=cost[x]+1;
            }
            q=q->urm;
        }
        pr++;
    }
}
int main()
{
    bfs=fopen("bfs.in","r");
    fscanf(bfs,"%ld %ld %ld",&n,&m,&s);
    creare();
    citire();
    sterg();
    bf(s);
    for (i=1;i<=n;i++)
    {
        if (i!=s && !cost[i]) g<<"-1 ";
        else g<<cost[i]<<' ';
    }
    g<<'\n';
    g.close();
    return 0;
}