SlideShare a Scribd company logo
1 of 5
#include<fstream.h>
#include <cstdio>
#include <conio.h>
#include<iostream.h>
ifstream fin("grafn.in");
ofstream fout("grafn.out");
using namespace std ;
struct muchie
{
int x,y,c;
}e[100];
class grafn {
private:
int n,m,a[50][50];
muchie e[50];
public:
grafn();
grafn(grafn&);
~grafn();
void comp();
void citire();
void afisare();
friend void operator- (grafn &A, grafn &B) ;
void BF(int ,int, int viz[]);
void Kruskal();
friend istream & operator>>(istream & is,grafn & g);
friend ostream & operator<<(ostream & os,grafn & g);
};
grafn::grafn()
{
int i , j ;
n=0;
for (i=1;i<=49;i++)
for (j=1;j<=49;j++)
a[i][j]=0;
}
grafn::grafn(grafn&g)
{
int i,j;
n=g.n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=g.a[i][j];
}
grafn :: ~ grafn()
{
fout<<"apel pentru distrugerea grafului"<<this<<'n';
}
void grafn :: citire()
{
int i,x,y;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
a[x][y]=a[y][x]=1;
e[i].x=x; e[i].y = y; fin>>e[i].c;
}
}
void grafn :: afisare()
{
int i,j;
fout<<n<<'n';
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
fout<<a[i][j]<<' ';
fout<<'n';
}
}
void grafn :: BF(int x0, int nc , int viz[])
{
int c[100]={0},p,u,z,i;
c[0]=x0;
p=u=0;
viz[x0]=nc;
while(p<=u)
{
z=c[p];
p++;
for(i=1;i<=n;i++)
if(a[z][i]==1 && viz[i]==0)
{
u++;
c[u]=i;
viz[i]=nc;
}
}
}
void grafn :: comp()
{
int nrc=0,vz[100]={0},i;
for(i=1;i<=n;i++)
if(vz[i]==0)
{
nrc++;
BF(i,nrc,vz);
}
int j;
cout << " Numarul de componente conexe: "<<nrc<<'n';
for ( i =1 ; i<=nrc;++ i )
{
cout << " Componenta "<<i<<" contine nodurile : ";
for ( j = 1 ; j<=n;++j)
if ( vz[j]==i)
cout << j << ' ' ;
cout <<'n';
}
}
void grafn :: Kruskal()
{int r,t,ct=0,nrm=0,i=0,j,u,v,l[100],aux;
for(i=1;i<=n;i++)
l[i]=i;
for(i=1;i<=m;i++)
for(j=i+1;j<=m;j++)
if(e[i].c>e[j].c)
{
aux=e[i];
e[i]=e[j];
e[j]=aux;
}
i=0;
while(nrm<n-1)
{
u=e[i].x;
v=e[i].y;
if(l[u]!=l[v])
{
t=l[u];
r=l[v];
for(j=1;j<=n;j++)
if(l[j]==t)
l[j]=r;
ct=ct+e[i].c;
fout<<e[i].x<<' '<<e[i].y;
}
}
fout<<ct<<endl;
}
istream & operator>>(istream & is,grafn &g)
{
int i,m,x,y;
cout << " Dati numarul de noduri: n" ;
is>>g.n ;
cout << " Dati numarul de muchii: n" ;
is>>m;
for(i=1;i<=m;i++)
{
is>>x>>y;
g.a[x][y]=g.a[y][x]=1;
}
return is;
}
ostream & operator<<(ostream & os ,grafn &g)
{
int i,j;
if (g.n==1)
os << " Graful are un nod n";
else
os << " Graful are "<<g.n<<" noduri n";
//os<<g.n<<'n';
os << " Matricea de adiacenta a grafului selectat:n";
for(i=1;i<=g.n;i++)
{
for(j=1;j<=g.n;j++)
os<<g.a[i][j]<<" ";
os<<'n';
}
return os;
}
void operator- (grafn &A, grafn &B)
{
int i , j , minn ;
minn=A.n;
if ( minn>B.n)
minn=B.n;
for ( i = 1; i <= minn ; ++ i)
for ( j = 1; j<= minn ;++ j )
if ( A.a[i][j]==B.a[i][j] && A.a[i][j] )
A.a[i][j] = A.a[j][i]= 0;
}
int main()
{
int c ;
grafn A[3];
//meniul vietii :
do {
system ("cls");
cout<<" 1. Citeste graf n";
cout<<" 2. Afiseaza graf n";
cout<<" 3. Diferenta intre grafuri n";
cout<<" 4. Afiseaza componente conexe n";
cout<<" 0. Iesire n";
cin>>c;
switch (c)
{
case 1 :
{
int x ;
system ("cls");
cout << " 1. Citeste primul graf n";
cout << " 2. Citeste al doilea graf n";
cin >> x;
system ("cls");
cin>>A[x];
break ;
}
case 2 :
{
int x ;
system ("cls");
cout << " 1. Afiseaza primul graf n";
cout << " 2. Afiseaza al doilea graf n";
cin >> x ;
system ("cls");
cout << A [ x ];
getch();
break ;
}
case 3 :
{
int x , y;
system ("cls");
cout << " Afiseaza diferenta X - Y n";
cout << " Dati X: " ;
cin >> x;
cout << " Dati Y: " ;
cin >> y;
cout << 'n' ;
system ("cls");
cout << " Situatia grafului "<< x << " inaintea efectuarii operatiei: n";
cout << A[x];
cout << 'n';
cout << " Situatia grafului "<< y << " inaintea efectuarii operatiei: n";
cout << A[y];
cout << 'n';
A[x]-A[y];
cout << " #########################################################nn";
cout << " Situatia grafului "<< x << " dupa efectuarea operatiei: ";
cout << A[x];
cout << 'n';
getch();
break ;
}
case 4 :
{
int x;
system ("cls");
cout << " 1. Primul graf n";
cout << " 2. Al doilea graf n";
cin >> x ;
system ("cls");
A[x].comp();
getch();
break ;
}
}
} while (c) ;
}

More Related Content

What's hot (20)

C - Pattern - Code - [Future Programming]
C - Pattern - Code - [Future Programming]C - Pattern - Code - [Future Programming]
C - Pattern - Code - [Future Programming]
 
Alejandro
AlejandroAlejandro
Alejandro
 
Lector
LectorLector
Lector
 
contoh Program C++ tentang fungsi for
contoh Program C++ tentang fungsi forcontoh Program C++ tentang fungsi for
contoh Program C++ tentang fungsi for
 
Los fantastico
Los fantasticoLos fantastico
Los fantastico
 
Bubble sort
Bubble sortBubble sort
Bubble sort
 
Pruebabfs
PruebabfsPruebabfs
Pruebabfs
 
Cg lab cse-vii
Cg lab cse-viiCg lab cse-vii
Cg lab cse-vii
 
python-geohex
python-geohexpython-geohex
python-geohex
 
Vcs6
Vcs6Vcs6
Vcs6
 
Trabajo de programacion
Trabajo de programacionTrabajo de programacion
Trabajo de programacion
 
Yohan jacobi gaussseidel_analisis
Yohan jacobi gaussseidel_analisisYohan jacobi gaussseidel_analisis
Yohan jacobi gaussseidel_analisis
 
Zadatak
ZadatakZadatak
Zadatak
 
Scanfill polygon
Scanfill polygonScanfill polygon
Scanfill polygon
 
Corridas
CorridasCorridas
Corridas
 
Linklist through struct
Linklist through structLinklist through struct
Linklist through struct
 
Excerpt
ExcerptExcerpt
Excerpt
 
Excerpt
ExcerptExcerpt
Excerpt
 
Kruskal algorithm
Kruskal algorithmKruskal algorithm
Kruskal algorithm
 
Kasus 3.3 akar
Kasus 3.3 akarKasus 3.3 akar
Kasus 3.3 akar
 

Viewers also liked

Viewers also liked (17)

Haight Resume 9-6-15
Haight Resume 9-6-15Haight Resume 9-6-15
Haight Resume 9-6-15
 
Analisis konteks
Analisis konteksAnalisis konteks
Analisis konteks
 
letter_head_john's_1
letter_head_john's_1letter_head_john's_1
letter_head_john's_1
 
Appso team no 70
Appso team no 70Appso team no 70
Appso team no 70
 
130716 산통부
130716 산통부130716 산통부
130716 산통부
 
Pdf mapa conceptual
Pdf mapa conceptualPdf mapa conceptual
Pdf mapa conceptual
 
Learning team technology and the teacher
Learning team technology and the teacherLearning team technology and the teacher
Learning team technology and the teacher
 
1 chair tony slome - commercial
1 chair   tony slome - commercial1 chair   tony slome - commercial
1 chair tony slome - commercial
 
진대제 신성인사장 발표자료
진대제 신성인사장 발표자료진대제 신성인사장 발표자료
진대제 신성인사장 발표자료
 
246408936 elektrostatika1.pdf
246408936 elektrostatika1.pdf246408936 elektrostatika1.pdf
246408936 elektrostatika1.pdf
 
Kleidung LV
Kleidung LVKleidung LV
Kleidung LV
 
Buku standar-mutu-upm-unsri
Buku standar-mutu-upm-unsriBuku standar-mutu-upm-unsri
Buku standar-mutu-upm-unsri
 
Dna fingerprinting
Dna fingerprintingDna fingerprinting
Dna fingerprinting
 
Green Synthesis of Nano-Particles and its Application in Treatment of Rheumat...
Green Synthesis of Nano-Particles and its Application in Treatment of Rheumat...Green Synthesis of Nano-Particles and its Application in Treatment of Rheumat...
Green Synthesis of Nano-Particles and its Application in Treatment of Rheumat...
 
Kondenzatori 14
Kondenzatori 14Kondenzatori 14
Kondenzatori 14
 
Font basics
Font basics Font basics
Font basics
 
Phytosynthesis of Au, Ag, and Au
Phytosynthesis of Au, Ag, and AuPhytosynthesis of Au, Ag, and Au
Phytosynthesis of Au, Ag, and Au
 

Info clasa

  • 1. #include<fstream.h> #include <cstdio> #include <conio.h> #include<iostream.h> ifstream fin("grafn.in"); ofstream fout("grafn.out"); using namespace std ; struct muchie { int x,y,c; }e[100]; class grafn { private: int n,m,a[50][50]; muchie e[50]; public: grafn(); grafn(grafn&); ~grafn(); void comp(); void citire(); void afisare(); friend void operator- (grafn &A, grafn &B) ; void BF(int ,int, int viz[]); void Kruskal(); friend istream & operator>>(istream & is,grafn & g); friend ostream & operator<<(ostream & os,grafn & g); }; grafn::grafn() { int i , j ; n=0; for (i=1;i<=49;i++) for (j=1;j<=49;j++) a[i][j]=0; } grafn::grafn(grafn&g) { int i,j; n=g.n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=g.a[i][j]; } grafn :: ~ grafn() { fout<<"apel pentru distrugerea grafului"<<this<<'n'; } void grafn :: citire() { int i,x,y; fin>>n>>m; for(i=1;i<=m;i++) { fin>>x>>y; a[x][y]=a[y][x]=1;
  • 2. e[i].x=x; e[i].y = y; fin>>e[i].c; } } void grafn :: afisare() { int i,j; fout<<n<<'n'; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) fout<<a[i][j]<<' '; fout<<'n'; } } void grafn :: BF(int x0, int nc , int viz[]) { int c[100]={0},p,u,z,i; c[0]=x0; p=u=0; viz[x0]=nc; while(p<=u) { z=c[p]; p++; for(i=1;i<=n;i++) if(a[z][i]==1 && viz[i]==0) { u++; c[u]=i; viz[i]=nc; } } } void grafn :: comp() { int nrc=0,vz[100]={0},i; for(i=1;i<=n;i++) if(vz[i]==0) { nrc++; BF(i,nrc,vz); } int j; cout << " Numarul de componente conexe: "<<nrc<<'n'; for ( i =1 ; i<=nrc;++ i ) { cout << " Componenta "<<i<<" contine nodurile : "; for ( j = 1 ; j<=n;++j) if ( vz[j]==i) cout << j << ' ' ; cout <<'n'; } } void grafn :: Kruskal()
  • 3. {int r,t,ct=0,nrm=0,i=0,j,u,v,l[100],aux; for(i=1;i<=n;i++) l[i]=i; for(i=1;i<=m;i++) for(j=i+1;j<=m;j++) if(e[i].c>e[j].c) { aux=e[i]; e[i]=e[j]; e[j]=aux; } i=0; while(nrm<n-1) { u=e[i].x; v=e[i].y; if(l[u]!=l[v]) { t=l[u]; r=l[v]; for(j=1;j<=n;j++) if(l[j]==t) l[j]=r; ct=ct+e[i].c; fout<<e[i].x<<' '<<e[i].y; } } fout<<ct<<endl; } istream & operator>>(istream & is,grafn &g) { int i,m,x,y; cout << " Dati numarul de noduri: n" ; is>>g.n ; cout << " Dati numarul de muchii: n" ; is>>m; for(i=1;i<=m;i++) { is>>x>>y; g.a[x][y]=g.a[y][x]=1; } return is; } ostream & operator<<(ostream & os ,grafn &g) { int i,j; if (g.n==1) os << " Graful are un nod n"; else os << " Graful are "<<g.n<<" noduri n"; //os<<g.n<<'n'; os << " Matricea de adiacenta a grafului selectat:n"; for(i=1;i<=g.n;i++)
  • 4. { for(j=1;j<=g.n;j++) os<<g.a[i][j]<<" "; os<<'n'; } return os; } void operator- (grafn &A, grafn &B) { int i , j , minn ; minn=A.n; if ( minn>B.n) minn=B.n; for ( i = 1; i <= minn ; ++ i) for ( j = 1; j<= minn ;++ j ) if ( A.a[i][j]==B.a[i][j] && A.a[i][j] ) A.a[i][j] = A.a[j][i]= 0; } int main() { int c ; grafn A[3]; //meniul vietii : do { system ("cls"); cout<<" 1. Citeste graf n"; cout<<" 2. Afiseaza graf n"; cout<<" 3. Diferenta intre grafuri n"; cout<<" 4. Afiseaza componente conexe n"; cout<<" 0. Iesire n"; cin>>c; switch (c) { case 1 : { int x ; system ("cls"); cout << " 1. Citeste primul graf n"; cout << " 2. Citeste al doilea graf n"; cin >> x; system ("cls"); cin>>A[x]; break ; } case 2 : { int x ; system ("cls"); cout << " 1. Afiseaza primul graf n"; cout << " 2. Afiseaza al doilea graf n"; cin >> x ; system ("cls"); cout << A [ x ]; getch(); break ; } case 3 : {
  • 5. int x , y; system ("cls"); cout << " Afiseaza diferenta X - Y n"; cout << " Dati X: " ; cin >> x; cout << " Dati Y: " ; cin >> y; cout << 'n' ; system ("cls"); cout << " Situatia grafului "<< x << " inaintea efectuarii operatiei: n"; cout << A[x]; cout << 'n'; cout << " Situatia grafului "<< y << " inaintea efectuarii operatiei: n"; cout << A[y]; cout << 'n'; A[x]-A[y]; cout << " #########################################################nn"; cout << " Situatia grafului "<< x << " dupa efectuarea operatiei: "; cout << A[x]; cout << 'n'; getch(); break ; } case 4 : { int x; system ("cls"); cout << " 1. Primul graf n"; cout << " 2. Al doilea graf n"; cin >> x ; system ("cls"); A[x].comp(); getch(); break ; } } } while (c) ; }