You are on page 1of 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