# PBinfo #4074 – Distante – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Se consideră un graf neorientat conex cu n noduri, numerotate de la 1 la n, şi m muchii.  Definim distanţa minimă dintre două noduri x şi y ca fiind numărul minim de muchii al unui lanţ elementar care uneşte x cu y.

Cerinţa
Se dă o pereche de noduri p q. Determinați nodurile r cu proprietatea că distanța minimă dintre p și r este egală cu distanța minimă dintre r și q.

Date de intrare
Fişierul de intrare distante.in conţine pe prima linie numere n m p q. Fiecare dintre următoarele m linii va conţine câte două numere x şi y, separate printr-un spaţiu, cu semnificaţia: există o muchie între nodul x şi nodul y.

Date de ieşire
Fişierul de ieşire distante.out va conține pe prime linie, separate prin câte un spațiu, modurile cerute în ordine crescătoare.

Restricţii şi precizări

n ≤ 1000

Exemplu:
distante.in

7 8 2 4
1 2
2 3
2 6
3 4
3 6
3 7
4 5
4 6
distante.out

3 6 7

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n , m , A[1001][1001], V[1001], Dp[1001], Dq[1001], p , q;
void BFS(int x , int D[])
{
	for(int i = 1 ; i <= n ; i ++)
		V[i] = 0;
	int Q[1001], st = 1 , dr = 0;
	Q[++dr] = x, V[x]  = 1, D[x] = 0;
	while(st <= dr)
	{
		int k = Q[st];
		for(int i = 1 ; i <= n ; i ++)
			if(A[k][i] == 1 && V[i] == 0)
			{
				Q[++ dr] = i;
				V[i] = 1;
				D[i] = D[k] + 1;
			}
		st ++;
	}
}
int main()
{
    int i , j;
    fin >> n >> m >> p >> q;
    while(m)
    {
		fin >> i >> j;
        A[i][j] = A[j][i] = 1;
        m --;
    }
    BFS(p, Dp);
    BFS(q, Dq);
    for(int i = 1 ; i <= n ; i ++)
		if(Dp[i] == Dq[i])
			fout << i << " ";
	fout << '\n';
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4074)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4074/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4074/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
