Se dă un graf. Să se scrie o funcţie care citeşte datele şi construieşte matricea, o funcţie cu parametru matrice care verifică dacă este simetrică şi are diag. principală 0 (returnează 1 sau 0), o funcţie cu parametru nr nat i care returnează gradul nodului i, o funcţie care afişează nodurile izolate, terminale, de grad n-1, o funcţie care primeşte i şi afişează nodurile adiacente lui i, o funcţie care returnează 1 dacă graful e complet şi 0 în caz contrar.
#include<iostream>Fisier
#include<fstream>
#include<iomanip>
using namespace std;
int u[10][10],n,m,i,j,k,a,b,c;
void citire()
{ifstream f("graf");
int j;
f>>n>>m;
for(j=1;j<=m;j++)
{f>>a>>b;
u[a][b]=u[b][a]=1;}
f>>i;
}
int simetrica(int u[10][10])
{int ok=1,i,j,ko=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{if(u[i][j]!=u[j][i])
ok=0;
if(i==j && u[i][j]==1)
ko=0;
}
if(ok==1 && ko==1)
return 1;
else return 0;
}
int grad(int i)
{int j,s=0;
for(j=1;j<=n;j++)
if(u[i][j]==1)
s++;
return s;
}
void noduri()
{int i,j,s=0,a[10],b[10],c[10],aa=1,bb=1,cc=1;
for(i=1;i<=n;i++)
{s=0;
for(j=1;j<=n;j++)
if(u[i][j]==1)
s++;
if(s==0)
{a[aa]=i;aa++;}
if(s==1)
{b[bb]=i;bb++;}
if(s==n-1)
{c[cc]=i;cc++;}
}
cout<<"Noduri izolate ";
for(i=1;i<aa;i++)
cout<<a[i]<<" ";
if(aa==1)
cout<<"nu sunt";
cout<<endl<<"Noduri terminale ";
for(i=1;i<bb;i++)
cout<<b[bb]<<" ";
if(bb==1)
cout<<"nu sunt";
cout<<endl<<"Noduri de grad "<<n-1<<" ";
for(i=1;i<cc;i++)
cout<<c[cc]<<" ";
if(cc==1)
cout<<"nu sunt";
}
void adiacente(int i)
{int j;
cout<<endl<<"Nodurile adiacente lui "<<i<<": ";
for(j=1;j<=n;j++)
if(u[i][j]==1)
cout<<j<<" ";
cout<<endl;
}
int complet()
{
if(m==n*(n-1)/2)
return 1;
else return 0;
}
int main()
{citire();
//cout<<i;
if(simetrica(u)==1)
cout<<"Matrice simetrica"<<endl;
else cout<<"Matrice nesimetrica"<<endl;
cout<<"Gradul nodului "<<i<<" este "<<grad(i)<<endl;
noduri();
cout<<endl;
adiacente(i);
if(complet()==1)
cout<<"Graf complet";
else cout<<"Graful nu e complet";
}
6 5
1 5
1 4
2 4
2 3
3 5
2