#include <iostream>
#include <fstream>
#define dimensiune 100
using namespace std;
void citire(int &n, int &m, int a[][dimensiune])
{
int e1,e2;
ifstream in("conex.in");
in>>n>>m;
for(int i=1; i<=m; i++)
{
in>>e1>>e2;
a[e1][e2]=1;
a[e2][e1]=1;
}
in.close();
}
void afisare(int n, int a[][dimensiune])
{
cout<<"Matricea de adiacenta este:"<<endl;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <=n; j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
void afisare_elemente_conexe(int n, int culoare, int viz[])
{
cout<<endl<<"Elementele conexe sunt "<<culoare-1<<endl;
int ok = 0;
for (int c = 0; c <= culoare; c++)
{
for(int i = 1; i <= n; i++)
if(viz[i] == c)
{
cout<<i<<" ";
ok = 1;
}
if(ok == 1) cout<<endl;
ok = 0;
}
}
int legatura(int a[][dimensiune], int x, int y)
{
return (a[x][y] == 1);
}
void BFS(int a[][dimensiune], int n, int viz[], int coada[], int ns, int c)
{
int i;
coada[1]=ns;
viz[ns]=c;
int pi=1;
int ps=1;
while(pi<=ps)
{
for(i=1;i<=n;i++)
if(viz[i]==0 and legatura(a, coada[pi], i))
{
coada[++ps]=i;
viz[i]=c;
}
pi +=+ 1;
}
}
int main()
{
int c=0,i,n,m;
int a[dimensiune][dimensiune];
int viz[dimensiune] = {0}, coada[dimensiune] = {0};
citire(n,m,a);
afisare(n,a);
for(i=0;i<=n;i++)
{
if(viz[i]==0)
{
c++;
BFS(a,n,viz,coada,i,c);
}
}
if(c==2) cout<<"Graful este conex";
else cout<<"Graful nu este conex";
afisare_elemente_conexe(n,c,viz);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2RlZmluZSBkaW1lbnNpdW5lIDEwMAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgY2l0aXJlKGludCAmbiwgaW50ICZtLCBpbnQgYVtdW2RpbWVuc2l1bmVdKQp7CiAgICBpbnQgZTEsZTI7CiAgICBpZnN0cmVhbSBpbigiY29uZXguaW4iKTsKICAgIGluPj5uPj5tOwogICAgZm9yKGludCBpPTE7IGk8PW07IGkrKykKICAgIHsKICAgICAgICBpbj4+ZTE+PmUyOwogICAgICAgIGFbZTFdW2UyXT0xOwogICAgICAgIGFbZTJdW2UxXT0xOwogICAgfQogICAgaW4uY2xvc2UoKTsKfQoKdm9pZCBhZmlzYXJlKGludCBuLCBpbnQgYVtdW2RpbWVuc2l1bmVdKQp7CiAgICBjb3V0PDwiTWF0cmljZWEgZGUgYWRpYWNlbnRhIGVzdGU6Ijw8ZW5kbDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PW47IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dDw8YVtpXVtqXTw8IiAiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQ8PGVuZGw7CiAgICAgICAgfQp9Cgp2b2lkIGFmaXNhcmVfZWxlbWVudGVfY29uZXhlKGludCBuLCBpbnQgY3Vsb2FyZSwgaW50IHZpeltdKQp7CiAgICBjb3V0PDxlbmRsPDwiRWxlbWVudGVsZSBjb25leGUgc3VudCAiPDxjdWxvYXJlLTE8PGVuZGw7CiAgICBpbnQgb2sgPSAwOwogICAgZm9yIChpbnQgYyA9IDA7IGMgPD0gY3Vsb2FyZTsgYysrKQogICAgewogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgICAgICBpZih2aXpbaV0gPT0gYykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dDw8aTw8IiAiOwogICAgICAgICAgICAgICAgb2sgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgaWYob2sgPT0gMSkgY291dDw8ZW5kbDsKICAgICAgICBvayA9IDA7CiAgICB9Cn0KCmludCBsZWdhdHVyYShpbnQgYVtdW2RpbWVuc2l1bmVdLCBpbnQgeCwgaW50IHkpCnsKICAgIHJldHVybiAoYVt4XVt5XSA9PSAxKTsKfQoKdm9pZCBCRlMoaW50IGFbXVtkaW1lbnNpdW5lXSwgaW50IG4sIGludCB2aXpbXSwgaW50IGNvYWRhW10sIGludCBucywgaW50IGMpCnsKICAgIGludCBpOwogICAgY29hZGFbMV09bnM7CiAgICB2aXpbbnNdPWM7CiAgICBpbnQgcGk9MTsKICAgIGludCBwcz0xOwogICAgd2hpbGUocGk8PXBzKQogICAgewogICAgICAgIGZvcihpPTE7aTw9bjtpKyspCiAgICAgICAgICAgIGlmKHZpeltpXT09MCBhbmQgbGVnYXR1cmEoYSwgY29hZGFbcGldLCBpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29hZGFbKytwc109aTsKICAgICAgICAgICAgICAgIHZpeltpXT1jOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBpICs9KyAxOwogICAgfQp9CgoKCmludCBtYWluKCkKewogICAgaW50IGM9MCxpLG4sbTsKICAgIGludCBhW2RpbWVuc2l1bmVdW2RpbWVuc2l1bmVdOwogICAgaW50IHZpeltkaW1lbnNpdW5lXSA9IHswfSwgY29hZGFbZGltZW5zaXVuZV0gPSB7MH07CiAgICBjaXRpcmUobixtLGEpOwogICAgYWZpc2FyZShuLGEpOwogICAgZm9yKGk9MDtpPD1uO2krKykKICAgIHsKICAgICAgICBpZih2aXpbaV09PTApCiAgICAgICAgewogICAgICAgICAgICBjKys7CiAgICAgICAgICAgIEJGUyhhLG4sdml6LGNvYWRhLGksYyk7CiAgICAgICAgfQogICAgfQoKICAgIGlmKGM9PTIpIGNvdXQ8PCJHcmFmdWwgZXN0ZSBjb25leCI7CiAgICBlbHNlIGNvdXQ8PCJHcmFmdWwgbnUgZXN0ZSBjb25leCI7CgogICAgYWZpc2FyZV9lbGVtZW50ZV9jb25leGUobixjLHZpeik7Cn0K