Se considerã un graf neorientat conex cu n
vârfuri, numerotate de la 1
la n
, şi m
muchii. Definim distanţa minimă între două noduri x
şi y
ca fiind numărul minim de muchii al unui lanţ elementar care uneşte x
cu y
.
Cerinţa
Sã se determine nodul aflat la cea mai mare distanţã minimă faţã de nodul 1
.
Date de intrare
Fişierul de intrare dmax.in
conţine pe prima linie două numere n
şi m
, reprezentând numărul de noduri, respectiv numărul de muchii. 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 dmax.out
va conţine pe prima linie numărul z
, prin care este identificat nodul aflat la cea mai mare distanţã minimă faţã de nodul 1
.
Restricţii şi precizări
0 < n < 100
0 < m < 1000
- Dacă există mai multe noduri aflate la distanţa maximă, poate fi ales oricare dintre ele.
Exemplu
dmax.in
6 7 1 3 1 2 2 3 2 4 3 4 4 5 5 6
dmax.out
6
Explicație
Nodul 6
se află la distanţa minimă 4
faţă de nodul 1
.
#include <bits/stdc++.h> using namespace std; ifstream cin("dmax.in"); ofstream cout("dmax.out"); int n , m , x , y , a[101][101] , v[101] , nrc , d[101] , maxi , rez; void bfs(int x) { v[x] = 1; d[x] = 1; queue <int> Q; Q.push(x); while(!Q.empty()) { int aux = Q.front(); Q.pop(); for(int i = 1 ; i <= n ; i++) if(!v[i] && a[aux][i] == 1) { v[i] = 1; Q.push(i); d[i] = d[aux] + 1; } } } int main() { cin >> n >> m; for(int i = 1 ; i <= m ; i++) { cin >> x >> y; a[x][y] = a[y][x] = 1; } bfs(1); for(int i = 1 ; i <= n ; i++) if(d[i] > maxi) maxi = d[i] , rez = i; cout << rez; }