Cod sursa(job #1338487)

Utilizator TeodoraGTeodora Gidiuta TeodoraG Data 10 februarie 2015 05:55:26
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
using namespace std;
int n,m,s,a[10010][10010],q[100010],viz[100010];
void citire(ifstream& f)
{
    int i,x,y;
    f>>n>>m>>s;
    for(i=1;i<=m;i++)
       {
           f>>x>>y;
           a[x][y]=1;
       }
}
void BF(int y)
{int p,u,v,i;
    p=u=0;
    viz[s]=-1;
    q[p]=s;
    while(p<=u&&!viz[y])
    {
        v=q[p++];
        for(i=1;i<=n;i++)
           if(a[v][i]&&!viz[i])
             {
                 q[++u]=i;
                 viz[i]=v;
             }
    }
}
void Afisare_Drum_Minim(int y,ofstream& g)
{
    int poz=0,drum[100010],i;
    drum[0]=y;
    if(!viz[y])
      g<<-1<<" ";
    else
    {
        while(viz[drum[poz]]!=-1)
             drum[++poz]=viz[drum[poz-1]];
        g<<poz<<" ";
    }
}
int main()
{int y,i;
    ifstream f("bfs.in");
    ofstream g("bfs.out");
    citire(f);
    for(y=1;y<=n;y++)
       {
           for(i=1;i<=n;i++)
              viz[i]=0;
           BF(y);
           Afisare_Drum_Minim(y,g);
       }
    f.close();
    g.close();
    return 0;
}