Cod sursa(job #2954016)

Utilizator unomMirel Costel unom Data 12 decembrie 2022 23:45:09
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include<bits/stdc++.h>

using namespace std;

int n, m, s;
int v[1000][1000];
ifstream f("bfs.in");
ofstream g("bfs.out");
int d[1000];

void bfs(int start)
{
    vector<bool> visited(n, false);
    vector<int> q;

    q.push_back(start);
    visited[start] = true;

    int vis;
    int s = 0;
    while(!q.empty())
    {
        vis = q[0];

        int ok = 0;
        if(vis != start)
        {
            d[vis] = d[vis] + 1;
        }
        q.erase(q.begin());

        for(int i = 1; i<=n; i++)
        {
            if(v[vis][i] == 1 && !visited[i])
            {
                q.push_back(i);
                d[i] = s;
                visited[i] = true;
                ok = 1;
            }
        }
        if(ok == 1)
        {
            s++;
        }
    }
}

int main()
{
    f>>n>>m>>s;
    int x, y;
    for(int i = 0; i<m; i++)
    {
        f>>x>>y;
        v[x][y] = 1;
    }

    bfs(s);

    for(int i = 1; i<=n; i++)
    {
        if(i != s && d[i] == 0)
        {
            g<<-1<<" ";
        }
        else
        {
            g<<d[i]<<" ";
        }
    }
    return 0;
}