0% found this document useful (0 votes)
44 views11 pages

New Microsoft Word Document

The document discusses code for representing and working with graphs. It includes code snippets for reading in a graph from a file and representing it using an adjacency matrix. It also includes functions for tasks like finding the degree of nodes, checking if a sequence of nodes forms a chain, and removing nodes from the graph that are multiples of a given number.

Uploaded by

Ilaria Simion
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views11 pages

New Microsoft Word Document

The document discusses code for representing and working with graphs. It includes code snippets for reading in a graph from a file and representing it using an adjacency matrix. It also includes functions for tasks like finding the degree of nodes, checking if a sequence of nodes forms a chain, and removing nodes from the graph that are multiples of a given number.

Uploaded by

Ilaria Simion
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

1.Adiacenta #412 2.

Adiacenta1 #413

-lista de muchii-> matricea de adiacenta -lista muchiilor-> matricea de adiacenta

->n=nr de noduri m=nr de muchii m perechi de i ->perechi de I si j


si j
#include <iostream>
#include <iostream> #include <fstream>
#include <fstream> using namespace std;
using namespace std; ifstream f("adiacenta1.in");
ifstream f("adiacenta.in"); ofstream g("adiacenta1.out");
ofstream g("adiacenta.out"); int n,a[101][101],n1,n2;
int n,m,a[101][101],i,j,k; void citire()
void citire() {while(f>>n1>>n2)
{ f>>n>>m; {a[n1][n2]=1;
for(int k=1;k<=m;k++) a[n2][n1]=1;
{ f>>i>>j; if(n1>n)
a[i][j]=1; n=n1;
a[j][i]=1; if(n2>n)
}} n=n2;
void afisare() }
{for(int i=1;i<=n;i++) }
{ for(int j=1;j<=n;j++) void afis()
g<<a[i][j]<<" "; {for(int i=1;i<=n;i++)
g<<endl; {for(int j=1;j<=n;j++)
}} g<<a[i][j]<<" ";
int main() g<<endl;
{citire(); }
afisare(); }
return 0; int main()
} {citire();
afis();
return 0;}
3.ListaVecini #414 4.Grade #416

-lista de muchii-> lista vecinilor sai ->n =nr de noduri n perechi de i si j

->n=nr de noduri n perechi de i si j <- gradele a n noduri

<- n linii ,fiecare linie i va contine nr de vecini ai


#include <iostream>
lui i si vecinii acestuia
#include <fstream>
#include <iostream> using namespace std;
#include <fstream> ifstream f("grade.in");
using namespace std; ofstream g("grade.out");
ifstream f("listavecini.in"); int i,j,a[101][101],n,gr;
ofstream g("listavecini.out"); void citire()
int n,a[101][101],n1,n2; {f>>n;
void citire() while(f>>i>>j)
{f>>n; {a[i][j]=a[j][i]=1;
while(f>>n1>>n2)
{ a[n1][n2]=1; }
a[n2][n1]=1; }}
void afis() }
{for(int i=1;i<=n;i++) void afis()
{int s=0; {for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) {gr=0;
s=s+a[i][j]; for(int j=1;j<=n;j++)
g<<s<<" "; if(a[i][j]==1)
for(int j=1;j<=n;j++) gr++;
if(a[i][j]==1) g<<gr<<" ";
g<<j<<" "; }}
g<<endl;}} int main()
int main() {citire();
{citire(); afis();
afis(); return 0;
return 0; }
}
5.GradeK
if(grade_nod(i)==x)
-nodurile din graf care au gradul egal cu nodul k nr++;
->n=nr de noduri,k=nodul dat ,n perechi de i si j g<<nr;

<- prima linie nr de noduri determinate ,a doua g<<endl;


linie nodurile determinate for(int i=1;i<=n;i++)
if(grade_nod(i)==x)
#include <iostream>
g<<i<<" ";
#include <fstream>
return 0;}
using namespace std;
ifstream f("gradek.in");
ofstream g("gradek.out");
int i,j,a[101][101],n,gr,k,nr,m;
void citire()
{f>>n>>k;
while(f>>i>>j)
{a[i][j]=1;
a[j][i]=1;}}
int grade_nod(int k)
{gr=0;
for(int j=1;j<=n;j++)
if(a[k][j]==1 )
gr++;
return gr;}
void afis()
{for(int i=1;i<=n;i++)
{gr=0;
for(int j=1;j<=n;j++)
gr++;
g<<gr<<" ";}}
int main()
{citire();
int x=grade_nod(k);
for(int i=1;i<=n;i++)
g<<nrv<<" ";
6.Izolate for(int i=1;i<=n;i++)
-lista de muchii-> lista varfurilor izolate if(gr[i]==0)

->n=nr de noduri n perechi de i si j g<<i<<" ";


return 0;
<-prima linie numărul m de vârfuri izolate,
urmat de cele m vârfuri izolate }

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("izolate.in");
ofstream g("izolate.out");
int n,m,i,j,a[1001][1001],gr[1001];
void citire()
{f>>n;
while(f>>i>>j)
{a[i][j]=a[j][i]=1;

}}

int main()
{citire();
for(int i=1;i<=n;i++)
{gr[i]=0;
for(int j=1;j<=n;j++)
{if(a[i][j]==1)
gr[i]++;
}}
int nrv=0;
for(int i=1;i<=n;i++)
if(gr[i]==0)
nrv++;
else
{g<<nr<<" ";
7.GradK for(int i=1;i<=n;i++)

-n=nr de noduri ,k=gradul if(grd(i)==k)


g<<i<<" ";}
Afisarea nodurilor de grad k
return 0;}
<- nr m de noduri cu gradul k,cele m
noduri ,daca nu contine niciun nod cu grd k va
afisa NU EXISTA

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("gradk.in");
ofstream g("gradk.out");
int n,k,m,a[1001]
[1001],i,j,gr,x,v[1001],nr;
void citire()
{f>>n>>k;
while(f>>i>>j)
a[i][j]=a[j][i]=1;}
int grd(int y)
{gr=0;
for(int j=1;j<=n;j++)
if(a[y][j]==1)
gr++;
return gr;}
int main()
{citire();
for(int i=1;i<=n;i++)
if(grd(i)==k)
nr++;
if(nr==0)
g<<"NU EXISTA";
g<<nr<<" ";
for(int i=1;i<=n;i++)
if(grd(i)==maxi)

8.GradMax g<<i<<" ";


return 0;
-noduri cu grad max
}
<-nr de varfuri cu grad max si apoi varfurile

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("gradmax.in");
ofstream g("gradmax.out");
int n,k,m,a[1001]
[1001],i,j,gr,x,v[1001],nr,maxi=-1;
void citire()
{f>>n;
while(f>>i>>j)
a[i][j]=a[j][i]=1;}
int grd(int y)
{gr=0;
for(int j=1;j<=n;j++)
if(a[y][j]==1)
gr++;
return gr;}
int main()
{citire();
for(int i=1;i<=n;i++)
{x=grd(i);
if(x>maxi)
{maxi=x;
nr=1;}
else if(x==maxi)
nr++;}
int main()
{citire();
for(int i=1;i<=n;i++)
if(i%k==0)
{for(int j=1;j<=n;j++)
9.Subgraf2
a[i][j]=a[j][i]=0;}
- n noduri, etichetate de la 1 la n, m muchii
for(int i=1;i<=n;i++)
și un număr k.
{for(int j=1;j<=n;j++)
-Din acest graf se elimină toate nodurile
if(a[i][j]==1)
etichetate cu multipli ai lui k. Să se
determine câte muchii va avea subgraful nr++;
obținut. }
cout<<nr/2;
#include <iostream>
return 0;
#include <fstream>
}
#include <cmath>
using namespace std;
ifstream f("gradk.in");
ofstream g("gradk.out");
int n,k,m,a[1001]
[1001],i,j,gr,x,v[1001],nr,maxim,minim;
void citire()
{
cin>>n>>m>>k;
while(cin>>i>>j)
a[i][j]=a[j][i]=1;
}
int grd(int y)
{gr=0;
for(int j=1;j<=n;j++)
if(a[y][j]==1)
gr++;
return gr;
}
{for(int i=2;i<=p;i++)
if(a[v[i-1]][v[i]]==0)
return 0;
return 1;
}
int elementar (int v[],int p)
10.VerifLant
{
- n vârfuri și mai multe șiruri de vârfuri din for(int i=2;i<=p;i++)
graf. Să se verifice despre fiecare șir dacă
reprezintă un lanț. În caz afirmativ, să se for(int j=1;j<=i-1;j++)
precizeze dacă este elementar. if(v[i]==v[j])

-n și m, reprezentând numărul de vârfuri return 0;


ale grafului și numărul de muchii  return 1;

-m linii conține câte o pereche de


numere i j }

-Urmează numărul de șiruri k. Pentru int main()


fiecare șir se dă numărul de vârfuri și apoi {citire();
vârfurile
f>>k;
-NU, ELEMENTAR, NEELEMENTAR for(int j=1;j<=k;j++)
{
#include <iostream>
f>>p;
#include <fstream>
for(int i=1;i<=p;i++)
using namespace std;
f>>v[i];
ifstream f("veriflant.in");
if(verif(v,p)==1)
ofstream g("veriflant.out");
{if(elementar(v,p)==1)
int k,p,n,m,a[1001][1001],x,y,v[201];
g<<"ELEMENTAR"<<endl;
void citire()
else g<<"NEELEMENTAR"<<endl;
{f>>n>>m;
}
for(int i=1;i<=m;i++)
else g<<"NU"<<endl;
{f>>x>>y;
a[x][y]=a[y][x]=1;
}return 0;
}
}
}
int verif(int v[],int p)
return 0;}
for(int i=1;i<=k;i++)
{if(a[v[k-1]][v[k]]==0)
return 0;}
return 1;}
void back(int k)
{for(int i=1;i<=n;i++)
{v[k]=i;
11.Lant
if(verif(k)==1)
-n vârfuri și două vârfuri p q. Să se {
determine toate lanțurile elementare cu
if(v[k]==q)
extremitățile p și q.
afis(k);
-toate lanțurile elementare cu extremitățile
else back(k+1);
în p, respectiv q
}
#include <fstream>
using namespace std; }
ifstream fin("lant.in"); }
ofstream fout("lant.out"); int main ()
int a[101][101],n,m,n1,n2,q,p,v[101]; {
void citire() citire();
{fin>>n>>m; v[1]=p;
for(int i=1;i<=m;i++) back(2);
{fin>>n1>>n2; return 0;
a[n1][n2]=1;
a[n2][n1]=1;} }
fin>>p>>q;}
void afis(int k)
{for(int i=1;i<=k;i++)
fout<<v[i]<<" ";
fout<<endl;}
int verif(int k)
{for(int i=1;i<k;i++)
{if(v[i]==v[k])
{if(v[i]==v[k])
return 0;}
for(int i=1;i<=k;i++)
{if(a[v[k-1]][v[k]]==0)
return 0;}
return 1;}
void back(int k)
{for(int i=1;i<=n;i++)
{v[k]=i;
12.LantMaxim if(verif(k)==1)
-n vârfuri și două vârfuri p q. Să se {if(v[k]==q)
determine cel mai lung lanț elementar cu
{if(k>ma)
extremitățile p și q.
{ma=k;
-va conține cel mai lung lanț elementar cu
for(int i=1;i<=k;i++)
extremitățile p și q
x[i]=v[i];
-Dacă sunt mai multe lanțuri de
}
lungime maximă, se va afișa primul în
ordine lexicografică. }
else back(k+1);
#include <fstream>
}
using namespace std;
ifstream fin("lantmaxim.in");
}
ofstream fout("lantmaxim.out");
}
int a[101]
[101],n,m,n1,n2,q,p,v[101],ma,x[101]; int main ()

void citire() {

{fin>>n>>m; citire();

for(int i=1;i<=m;i++) v[1]=p;

{fin>>n1>>n2; back(2);

a[n1][n2]=1; for(int i=1;i<=ma;i++)

a[n2][n1]=1;} fout<<x[i]<<" ";

fin>>p>>q;} return 0;

int verif(int k) }

{for(int i=1;i<k;i++)

You might also like