Cod sursa(job #1109414)

Utilizator StickmanLazar Alexandru Stickman Data 17 februarie 2014 09:33:00
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

queue <int> q;
char mat[100000][100000/6+1];
short int cost[100000];
int n, m, s;


int get(int i, int j, int k)
{
    char r = 1;
    r = r << (6-k);
    if((mat[i][j] & r)!=0)
        return j*6+k;
    else return 0;

}

void read(int x, int y)
{
    char r=1<<6;
    r = r >> y%6;
    mat[x][y/6] = mat[x][y/6] | r;
}

void bfs(int start)
{
    int a,vecin;
    q.push(start);
    while(!q.empty())
    {
        a=q.front();
        for(int i=0; i<n/6+1; i++)
        {
            for(int j=0; j<6; j++)
            {
                vecin = get(a, i, j);
                if(vecin !=0 )
                    if(cost[vecin]==-1)
                    {
                        cost[vecin] = cost[a]+1;
                        q.push(vecin);
                    }
            }
        }
        q.pop();
    }
}


int main()
{
    ifstream in("bfs.in");
    int x, y;
    in>>n>>m>>s;
    for(int i=0; i<m; i++)
    {
        in>>x>>y;
        read(x,y);
    }
    for(int i=1; i<=n; i++)
        cost[i]=-1;
    cost[s]=0;
    in.close();
    bfs(s);
    ofstream out("bfs.out");
    for(int i=1; i<=n; i++)
        out<<cost[i]<<" ";
    out.close();
    return 0;

}