Cod sursa(job #2586587)

Utilizator lamuritorulIoan Pop lamuritorul Data 21 martie 2020 11:01:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>

#define NMAX 100000
#define MMAX 1000000

using namespace std;

int coada[MMAX];
vector<int> graf[NMAX];
int distante[NMAX];

void citesteGraf(string fisierIntrare, int & n, int & sursa)
{
    ifstream fin(fisierIntrare);
    int m;
    fin >> n >> m >> sursa;
    sursa--;
    int x, y;
    for (int i = 0; i < m; i++)
    {
        fin >> x >> y;
        x--;
        y--;
        graf[x].push_back(y);
    }
    fin.close();
}

void bfs(int n, int sursa)
{
    int i, st = 0, lungime = 1;
    for (i = 0; i < n; i++)
        distante[i] = -1;
    distante[sursa] = 0;
    coada[0] = sursa;
    int s;
    while (st < lungime)
    {
        s = coada[st];
        st++;
        for (i = 0; i < graf[s].size(); i++)
            if (distante[graf[s][i]] < 0)
            {
                distante[graf[s][i]] = distante[s] + 1;
                coada[lungime] = graf[s][i];
                lungime++;
            }
    }
}

void scrieDistante(string fisierIesire, int n)
{
    ofstream fout(fisierIesire);
    for (int i = 0; i < n; i++)
        fout << distante[i] << " ";
    fout.close();
}

int main()
{
    int n, sursa;
    citesteGraf("bfs.in", n, sursa);
    bfs(n, sursa);
    scrieDistante("bfs.out", n);
    return 0;
}