#437
Se dă lista muchiilor unui graf neorientat. Să se verifice dacă graful este sau nu conex.
Date de intrare
Fişierul de intrare conex.in
conţine pe prima linie numărul n
, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere i j
, cu semnificația că există muchie între i
și j
.
Date de ieşire
Fişierul de ieşire conex.out
va conţine mesajul DA
, dacă graful dat este conex, respectiv NU
, în caz contrar.
Restricţii şi precizări
1 ≤ n ≤ 100
1 ≤ i , j ≤ n
- în fișierul de intrare muchiile se pot repeta
Exemplu
conex.in
5 1 4 3 5 2 4
conex.out
NU
#include <iostream> #include <fstream> using namespace std; ifstream fin("conex.in"); ofstream fout("conex.out"); int n , a[105][105]; int x[105], // coada pentru parcurgerea in latime v[105]; // vector caracteristic care precizeaza daca un varf a fost sau nu vizitat int conex() { int st, dr; st = dr = 1; v[1] = 1; x[1] = 1; while(st <= dr) { int k = x[st]; for(int i = 1; i <= n ; ++i) if(v[i] == 0 && a[k][i] == 1) { dr ++; v[i] = 1; x[dr] = i; } st ++; } for(int i = 1 ; i <= n ; ++i) if(v[i] == 0) return 0; return 1; } int main() { int i , j; fin >> n; while(fin >> i >> j) { a[i][j] = a[j][i] = 1; } if(conex()) fout <<"DA"; else fout << "NU"; return 0; }
using namespace std;
int n,A[100][100];
ifstream cin(“conex.in”);
ofstream cout(“conex.out”);
void citire()
{
int x,y;
cin>>n;
while(cin>>x && cin >>y)
A[x][y]=A[y][x]=1;
}
int v[100];
void dfs(int nod)
{
v[nod]=1;
for(int k=1;k<=n;k++)
if(A[k][nod] && !v[k])
dfs(k);
}
int main()
{
citire();
dfs(1);
bool ok=true;
for(int i=1;i<=n && ok==true;i++)
if(!v[i])
ok=false;
if(ok)
cout<<“DA”;
else
cout<<“NU”;
}