You are on page 1of 4

1. Se da un graf.

Daca nodul 1 si n sunt in aceeasi componenta conexa, atunci af


isati nodurile si muchiile din componenta.
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("date.in");
ofstream out("date.out");
int a[100][100],n,i,j,c[100],viz[100],k,x,pi,ps,s,ok,m,y,z,e;
void conex(int z, int c[100], int &pi)
{
pi=1; ps=1; c[pi]=z; viz[z]=1;
while(ps<=pi)
{
k=c[ps];
for(i=1;i<=n;i++)
if((a[k][i]==1) && (viz[i]==0))
{
pi++;
c[pi]=i;
viz[i]=1;
}
ps++;
}
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
for(i=1;i<=m;i++)
{
in>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
for(i=1;i<=n;i++) viz[i]=0;
z=1; s=0;
while(s!=n)
{
conex(z,c,pi);
ok=0;
for(i=1;i<=pi;i++)
{
if(c[i]==1) ok++;
if(c[i]==n) ok++;
}
if(ok==2) break;
i=1;
while(viz[i]==1) i++;
z=i;
s=s+pi;
}

if(ok==2)
{
out<<"Nodurile sunt: ";
for(i=1;i<=pi;i++) out<<c[i]<<" ";
out<<endl;
out<<"Muchiile sunt: ";
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
if(a[i][j]==1) for(e=1;e<=pi;e++) if(i==c[e]) out<<"("<<i<<","<<
j<<")"<<" ";
}
}
}
else out<<"Graful nu contine in aceeasi componenta conexa si primul si ultim
ul nod";
return 0;
}
2. Se da un nod x. Cate noduri si cate muchii are componenta conexa care il cont
ine pe x?
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("date.in");
ofstream out("date.out");
int a[100][100],n,i,j,c[100],viz[100],k,x,pi,ps,s,ok,m,y,z,e,t;
void conex(int z, int c[100], int &pi)
{
pi=1; ps=1; c[pi]=z; viz[z]=1;
while(ps<=pi)
{
k=c[ps];
for(i=1;i<=n;i++)
if((a[k][i]==1) && (viz[i]==0))
{
pi++;
c[pi]=i;
viz[i]=1;
}
ps++;
}
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
for(i=1;i<=m;i++)
{
in>>x>>y;

a[x][y]=1;
a[y][x]=1;
}
in>>t;
for(i=1;i<=n;i++) viz[i]=0;
z=t; s=0;
while(s!=n)
{
conex(z,c,pi);
ok=0;
for(i=1;i<=pi;i++) if(c[i]==t) ok++;
if(ok==1) break;
i=1;
while(viz[i]==1) i++;
z=i;
s=s+pi;
}
s=0;
if(ok==1)
{
out<<"Numarul de noduri este: "<<pi;
out<<endl;
out<<"Numarul de muchii este: ";
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
if(a[i][j]==1) for(e=1;e<=pi;e++) if(i==c[e]) s++;
}
}
out<<s;
}
return 0;
}
3. Se da un graf. Afisati nodurile componentelor conexe.
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("date.in");
ofstream out("date.out");
int a[100][100],n,i,j,c[100],viz[100],k,x,pi,ps,s,ok,m,y,z,e,t;
void conex(int z, int c[100], int &pi)
{
pi=1; ps=1; c[pi]=z; viz[z]=1;
while(ps<=pi)
{
k=c[ps];
for(i=1;i<=n;i++)
if((a[k][i]==1) && (viz[i]==0))

{
pi++;
c[pi]=i;
viz[i]=1;
}
ps++;
}
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
for(i=1;i<=m;i++)
{
in>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
for(i=1;i<=n;i++) viz[i]=0;
z=1; s=0;
while(s!=n)
{
conex(z,c,pi);
for(i=1;i<=pi;i++) out<<c[i]<<" ";
out<<endl;
i=1;
while(viz[i]==1) i++;
z=i;
s=s+pi;
}
return 0;
}

You might also like