Documente Academic
Documente Profesional
Documente Cultură
Informatica
Elev :Duman Ionut Alex
1.Coada dinamica
#include<iostream>
using namespace std;
const int Nmax=50;
int c[Nmax], inc=1, sf=0, X,n ;
typedef struct nod
{
int info;
nod *urm;
}
void creare()
{
TNOD *
cin>>n;
int i=1;
while(i<=n&&sf!=Nmax)
{
sf++; cin>>c[sf];i++;
}
}
void afisare(int c[],int inc,int sf)
{
for(int i=inc;i<=sf;i++)cout<<c[i]<<" ";
}
int main()
{
creare();
afisare(c,inc,sf);
return 0;
}
2.Scrieti un program care in mod repetat realizeaza una dintre urmatoarele
operatii asupra unei cozi: inserarea unui element,extragerea sau afisarea unui
element.
#include<iostream>
using namespace std;
const int Nmax=50;
int main()
{
int c,inv=0;
c=x;
while(c!=0){
inv=inv*10+c%10;
c=c/10;
}
if(inv==x) return 1;
else return 0;
}
int perfect(int x)
{
int d,sd=0;
for(d=1;d<=x/2;d++) if(x%d==0) sd=sd+d;
if(sd==x)return 1;
else return 0;
}
void afisare(TNOD *prim)
{
int s=0;
TNOD *p;
p=prim;
while(p){
if(perfect(p->info)||palindrom(p->info))s=s+p->info;
p=p->urm;
}
cout<<s;
}
int main()
{
TNOD *L;
L=creare();
afisare(L);
}
TNOD* creare()
{
TNOD *prim,*nou,*ultim;
int n,i;
cin>>n;
prim=new TNOD;
cin>>prim->info;
prim->urm=NULL;
ultim=prim;
for(i=2;i<=n;i++) {
nou=new TNOD;
cin>>nou->info;
nou->urm=NULL;
ultim->urm=nou;
ultim = nou;
}
return prim;
}
int perfect(int x)
{
int s=1,d;
for(d=2;d<=x/2;d++)if(x%d==0)s=s+d;
if(s==x)return 1;
else return 0;
}
void stergere(TNOD *p)
{
TNOD *q;
while(p->urm)
{
if(perfect(p->info)==1)
{
q->urm=p->urm;
}
q=p;
p=p->urm;
}
}
TNOD *sterg1(TNOD *p)
{
if(perfect(p->info)==1)p=p->urm;
return p;
}
void sterg2(TNOD *p)
{
while(p->urm->urm)p=p->urm;
if(perfect(p->urm->info)==1)p->urm=NULL;
}
void afisare(TNOD *p)
{
while(p)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
TNOD *p;
p=creare();
p=sterg1(p);
sterg2(p);
stergere(p);
afisare(p);
return 0;
}
6.//Scrieti o functie care primeste ca parametrii 2 pointeri catre primul si ultimul
nod ai unei liste liniare dublu inlantuite si determina perechile de noduri ale listei
cu proprietatea ca au aceeasi suma a cifrelor
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *urm,*prec;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim=new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim=new TNOD;
ultim->urm=NULL;
nou->urm=ultim;
ultim->prec=nou;
}
}
int suma(int x)
{
int s=0;
while(x!=0) {s=s+x%10;x=x/10;}
return s;
}
void chestie_nasoala()
{
TNOD *p,*pp;
p=prim->urm;
while(p!=ultim)
{
pp=p->urm;
while(pp!=ultim) {
if(suma(p->info)==suma(pp->info)) cout<<p->info<<" "<<pp>info<<endl;
pp=pp->urm;
}
p=p->urm;
}
}
void afisare()
{
TNOD*p;
p=prim->urm;
while(p!=ultim){
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
chestie_nasoala();
return 0;
}
7.//Se da o lista liniara simplu inlantuita. Sa se insereze dupa fiecare numar prim
dublu valorii respective
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *urm;
}TNOD;
TNOD* creare()
{
TNOD *prim,*ultim,*nou;
int n,i;
cin>>n;
prim=new TNOD;
cin>>prim->info;
prim->urm=NULL;
ultim=prim;
for(i=2;i<=n;i++)
{
nou=new TNOD;
cin>>nou->info;
nou->urm=NULL;
ultim->urm=nou;
ultim=nou;
}
return prim;
}
int nrprim(int x)
{
int d;
for(d=2;d<=x/2;d++) if(x%d==0) return 0;
return 1;
}
void afisare(TNOD *prim)
{
TNOD *p;
p=prim;
while(p){
cout<<p->info<<" ";
p=p->urm;
}
}
TNOD* inserare(TNOD *prim)
{
TNOD *p,*nou,*q;
int c;
p=prim;
while(p)
{
if(nrprim(p->info)){
nou=new TNOD;
nou->info=2*p->info;
nou->urm=p->urm;
p->urm=nou;
p=p->urm;
}
p=p->urm;
}
return prim;
}
int main()
{
TNOD *L;
L=creare();
L=inserare(L);
afisare(L);
}
TNOD *prim,*nou,*ultim;
TNOD* creare()
{
int n,i;
cin>>n;
prim=new TNOD;
cin>>prim->info;
prim->urm=NULL;
ultim=prim;
for(i=2;i<=n;i++) {
nou=new TNOD;
cin>>nou->info;
nou->urm=NULL;
ultim->urm=nou;
ultim = nou;
}
return prim;
}
void afisare(TNOD *p)
{
while(p)
{
cout<<p->info<<" ";
p=p->urm;
}
}
void functie_char(TNOD *p)
{
p=prim;
while(p)
{
if(p->info=='a') p->info=p->info + 1;
if(p->info=='e') p->info=p->info + 1;
if(p->info=='i') p->info=p->info + 1;
if(p->info=='o') p->info=p->info + 1;
if(p->info=='u') p->info=p->info + 1;
p->info=toupper(p->info);
p=p->urm;
}
}
int main()
{
TNOD *L;
L=creare();
afisare(L);
cout<<endl;
functie_char(L);
afisare(L);
return 0;
}
nou->info=ultim->prec->info+ultim->prec->prec->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
afisare(prim,ultim);
return 0;
}
int i,x;
prim=new TNOD;
f>>prim->info;
prim->urm=NULL;
ultim=prim;
while(f>>x) {
nou=new TNOD;
nou ->info=x;
nou -> urm = NULL;
ultim->urm=nou;
ultim=nou;
}
ultim->urm=prim;
return prim;
}
void afisare(TNOD *p)
{
TNOD *pp;
pp=p;
do
{
cout<<pp->info<<" ";
pp=pp->urm;
}while(pp!=p);
cout<<p->info;
}
float prim(TNOD *p)
{
int d,sem;
int nr=0,s=0;
TNOD *pp;
pp=p;
do
{
sem=1;
for(d=2;d<=p->info/2;d++)if(p->info%d==0)sem=0;
if(sem==1){nr++;s=s+p->info;}
p=p->urm;
}while(p!=pp);
sem=1;
for(d=2;d<=p->info/2;d++)if(p->info%d==0)sem=0;
if(sem==1){nr++;s=s+p->info;}
return float(s)/nr;
}
int main()
{
TNOD *L;
L=creare();
cout<<prim(L)<<endl;
afisare(L);
return 0;
}
12.Liste stiva
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *urm;
}TNOD;
TNOD* creare()
{
TNOD *vf, *nou;
int i,n;
cin>>n;
vf=new TNOD;
cin>>vf->info;
vf->urm=NULL;
for(i=2;i<=n;i++)
{
nou=new TNOD;
cin>>nou->info;
nou->urm=vf;
vf=nou;
}
return vf;
}
p=p->urm;
}
}
int main()
{
TNOD *p;
p=creare();
afisare(p);
return 0;
}
p=p->urm;
}
}
int main()
{
TNOD *p,*par,*impar;
p=creare();
par=creare_par(p);
impar=creare_impar(p);
afisare(par);
cout<<endl;
afisare(impar);
return 0;
}
14.//Se da o stiva alocata dinamic.Sa se creeze o stiva ce contine numere prime
din stiva initiala.
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *urm;
}TNOD;
}
int prim(int x)
{
int c=0,i;
for(i=1;i<=x;i++) if(x%i==0) c++;
if(c==2) return 1;
return 0;
}
int main()
{
creare();
afisare(prim,ultim);
return 0;
}
#include<iostream>
#include<string.h>
using namespace std;
typedef struct nod
{
char info;
nod *prec,*urm;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
char s[81];
cin.get(s,81);
TNOD *nou;
int i,n;
n=strlen(s);
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=0;i<=n;i++){
nou=ultim;
nou->info=s[i];
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
afisare(prim,ultim);
return 0;
}
17.// Sa se creeze o lista dublu inlantuita in care fiecare nod contine ca informatie
utila un carcater al unui sir citit din fisier. Sa se afiseze literele distincte din sir
impreuna cu frecventa lor de aparitie
#include<iostream>
#include<string.h>
using namespace std;
typedef struct nod
{
char info;
nod *urm,*prec;
} TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int n,i; char s[80];
cin.get(s,80);
prim=new TNOD;
ultim=new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->prec=prim;
ultim->urm=NULL;
n=strlen(s);
for(i=0;i<n;i++)
{
nou=ultim;
nou->info=s[i];
ultim=new TNOD;
nou->urm=ultim;
ultim->prec=nou;
ultim->urm=NULL;
}
}
void verificare(TNOD *prim,TNOD *ultim)
{
char i; int nr=0;
TNOD *p;
for(i='a';i<='z';i++)
{
nr=0;
p=prim->urm;
while(p!=ultim)
{
if(p->info==i) nr++;
p=p->urm;
}
if(nr!=0) cout<<i<<" "<<nr<<endl;
}
}
int main()
{
creare();
verificare(prim,ultim);
return 0;
}
18.Fiind data o lista dublu inlantuita, sa se insereze dupa ficare element negativ
al listei valoarea 0 apoi sa se afiseze lista.
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *prec,*urm;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void inserare()
{
TNOD *p,*nou;
p=prim->urm;
while(p!=ultim) {
if(p->info<0){
nou=new TNOD;
nou->info=0;
nou->urm=p->urm;
nou->prec=p->prec;
p->urm=nou;
}
p=p->urm;
}
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
int main()
{
creare();
inserare();
afisare(prim,ultim);
return 0;
}
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void inserare()
{
TNOD *nou;
nou=new TNOD;
cin>>nou->info;
nou->urm=prim->urm;
nou->prec=prim;
prim->urm=nou;
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
inserare();
afisare(prim,ultim);
return 0;
}
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void inserare(TNOD *prim)
{
int k;
TNOD *q,*nou;
cin>>k;
q=prim;
for(int i=1;i<=k-1;i++) q=q->urm;
nou=new TNOD;
cin>>nou->info;
nou->urm=q->urm;
q->urm=nou;
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
inserare(prim);
afisare(prim,ultim);
return 0;
}
21.Lldi inserare sfarsit
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *prec,*urm;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void inserare()
{
TNOD *nou;
nou=new TNOD;
cin>>nou->info;
nou->prec=ultim->prec;
ultim->prec->urm=nou;
nou->urm=ultim;
ultim->prec=nou;
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
inserare();
afisare(prim,ultim);
return 0;
}
22.// Un fisier contine mai multe numere intregi. Sa se creeze si afiseze o lista
liniara dublu inlantuita in care sa se introduca numai valorile pare
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
void creare()
{
TNOD *nou;
int i,n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
while(!f.eof()) {
f>>n;
if(n%2==0){
nou=ultim;
nou->info=n;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
}
void afisare_normala_st_dr(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
afisare_normala_st_dr(prim,ultim);
return 0;
}
23.// Se da o lista liniara dublu inlantuita care contine numai cifre. Sa se scrie o
functie care primeste ca parametrii 2 pointeri ( prim si ultim ) si care verifica daca
informatiile utile ale listei alcatuiesc un palindrom
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *prec,*urm;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int functia_mama(TNOD *prim,TNOD *ultim)
{
TNOD *p;
p=prim->urm;
TNOD *q;
q=ultim->prec;
int sem=1;
while(p!=q)
{
if(p->info!=q->info) sem=0;
p=p->urm;
q=q->prec;
}
return sem;
}
int main()
{
creare();
cout<<functia_mama(prim,ultim);
//afisare(prim,ultim);
return 0;
}
24.// LLDI se introduce 0 dupa fiecare patrat perfect.
#include<iostream>
#include<math.h>
using namespace std;
typedef struct nod
{
int info;
nod *prec,*urm;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void inserare(TNOD *p)
{
TNOD *nou;
nou=new TNOD;
nou->info=0;
nou->urm=p->urm;
nou->prec=p->prec;
p->urm=nou;
}
void verificare()
{
TNOD *p;
float c;
p=prim->urm;
while(p!=ultim) {
c=sqrt(p->info);
if(p->info/c==c) inserare(p);
p=p->urm;
}
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
verificare();
afisare(prim,ultim);
return 0;
}
25.// Se considera o lista liniara dubla inlantuita. Sa se scrie o functie care sterge
nodul cu numarul de ordine k.
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *prec,*urm;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
}
int main()
{
creare();
stergere(prim);
afisare(prim,ultim);
return 0;
}
26.Lldi stergerea prim
#include<iostream>
using namespace std;
typedef struct nod
{
int info;
nod *prec,*urm;
}TNOD;
TNOD *prim,*ultim;
void creare()
{
TNOD *nou;
int i,n;
cin>>n;
prim=new TNOD;
ultim = new TNOD;
prim->urm=ultim;
prim->prec=NULL;
ultim->urm=NULL;
ultim->prec=prim;
for(i=1;i<=n;i++){
nou=ultim;
cin>>nou->info;
ultim = new TNOD;
nou->urm = ultim;
ultim->prec = nou;
ultim->urm = NULL;
}
}
void afisare(TNOD *prec, TNOD *urm)
{
TNOD *p;
p=prim->urm;
while(p!=ultim)
{
cout<<p->info<<" ";
p=p->urm;
}
cout<<endl;
}
void stergere(TNOD *prim,TNOD *ultim)
{
TNOD *p;
p=prim->urm->urm;
p->prec=prim;
prim->urm=p;
}
int main()
{
creare();
afisare(prim,ultim);
stergere(prim,ultim);
afisare(prim,ultim);
return 0;
}
int main()
{
creare();
afisare(prim,ultim);
stergere(prim,ultim);
afisare(prim,ultim);
return 0;
}
28.Afisarea muchiilor grafului neorientat
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[100][100],n,i,j;
void citire(){
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) f>>a[i][j];}
int main(){
f>>n;
citire();
for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i<j) if(a[i][j]==1) cout<<i<<"
"<<j<<endl;
return 0;}
if(a[i][j]==1) s++;
k++;
c[k]=s;
}
for(i=1;i<=k;i++)
if(c[i]>max) max=c[i];
for(i=1;i<=k;i++)
if(c[i]==max) cout<<c[i]<<" ";
}
int main()
{
f>>n;
creare(n);
maxim();
return 0;
}
return 0;
}
void verf()
{
int s;
for(i=1;i<=n;i++)
{
s=0;
for(j=1;j<=n;j++)
if(i%2!=0) if(a[i][j]==1) s++;
if(i%2!=0) cout<<s<<" ";
}
}
int main()
{
f>>n;
creare(n);
verf();
return 0;
}
35.#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[50][50],i,j,n;
void citire(int n)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
int izolat()
{
int s;
for(i=1;i<=n;i++)
{
s=0;
for(j=1;j<=n;j++)
if(a[i][j]==1) s++;
if(s==0) return 1;
}
}
int terminal()
{
int s;
for(i=1;i<=n;i++)
{
s=0;
for(j=1;j<=n;j++)
if(a[i][j]==1) s++;
if(s==1) return 1;
}
}
void vecini(int x)
{
for(j=1;j<=n;j++)
if(a[x][j]==1) cout<<j<<" ";
}
int main()
{
int x;
f>>n;
citire(n);
if(izolat()==1) cout<<"Graful are varfuri izolate";
else cout<<"Graful nu are varfuri izolate";
cout<<"\n";
if(terminal()==1) cout<<"Graful are varfuri terminale";
else cout<<"Graful nu are varfuri terminale";
cout<<"\n";
cin>>x;
vecini(x);
return 0;
}
a[v[i].st][v[i].dr]=a[v[i].dr][v[i].st]=1;
}
}
void afisare(int a[50][50],int n)
{
int min,s=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
min=32000;
for(i=1;i<=m;i++) s=s+v[i].cost;
cout<< (float)s/m;
}
int main()
{
cin>>n>>m;
citire(m);
afisare(a,n);
return 0;
}
38.Sa se genereze toate lanturile elementare de dimensiune 3.
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[50][50],n,p,i,j,st[50];
void citire(int n)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
int valid(int p)
{
for(i=1;i<p;i++)
{
if(a[st[i]][st[i+1]]==0) return 0;
if(st[i]==st[p]) return 0;
}
return 1;
}
int final(int p)
{
if(p==3) return 1;
return 0;
}
void tiparire(int p)
{
for(i=1;i<=p;i++)
cout<<st[i]<<" ";
cout<<endl;
}
void back()
{
p=1;
st[p]=0;
while(p>0)
{
if(st[p]<n)
{
st[p]++;
if(valid(p)) if(final(p)) tiparire(p);
else {p++; st[p]=0;}
}
else p--;
}
}
int main()
{
f>>n;
citire(n);
back();
return 0;
}
39.
parcurgerea n latime
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[50][50],viz[50],c[50],i,n;
void citire(int m)
{
int x,y,m;
f>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
a[x][y]=a[y][x]=1;
}
}
void BF(int start)
{
int inc,sf,x,i;
inc=sf=1;
c[inc]=start;
viz[start]=1;
while(inc<=sf)
{
x=c[inc];
for(i=1;i<=n;i++)
if(a[x][i]==1 && viz[i]==0)
{
sf++;
c[sf]=i;
viz[i]=1;
}
inc++;
}
for(i=1;i<=sf;i++) cout<<c[i]<<" ";
}
int main()
{
f>>n;
citire(m);
BF(1);
return 0;
}
40.Sa se afiseze cea mai mare componenta conexa a unui graf.
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("date.in");
typedef struct
{
int st,dr;
} TMUCHIE ;
TMUCHIE v[100];
int a[100][100],c[100],viz[100],m,n,maxx=-32000,k=1;
void citire()
{
int i;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>v[i].st>>v[i].dr;
a[v[i].st][v[i].dr]=a[v[i].dr][v[i].st]=1;
}
}
void BF(int start,int p)
{
int x,i,inc,sf,nr=0;
inc=sf=1;
c[inc]=start;
viz[start]=p;
while(inc<=sf)
{
x=c[inc]; inc++;
for(i=1;i<=n;i++)
if(a[x][i]==1&&viz[i]==0){viz[i]=p; sf++; c[sf]=i; nr++;}
}
if(nr>maxx){maxx=nr; k=p;}
}
int main()
{
citire();
int p=0,i;
for(i=1;i<=n;i++)
{
if(viz[i]==0){p++;BF(i,p);}
}
for(i=1;i<=n;i++)
if(viz[i]==k)cout<<i<<" ";
return 0;
}
41. Sa se determine numarul de elemente conexe ale grafului / Sa se determine
numarul de muchii necesare pentru ca graful sa devina conex.
#include<iostream>
#include<fstream>
using namespace std;
int i,a[100][100],c[100],viz[100],n,j,m,nr;
ifstream f("date.in");
void citire(int m)
{
int x,y;
f>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
a[x][y]=a[y][x]=1;
}
}
void BF(int start)
{
int inc,sf,x;
viz[start]=1;
sf=1; inc=1;
c[inc]=start;
while(inc<=sf)
{
x=c[inc];
for(i=1;i<=n;i++)
if(a[x][i]==1 && viz[i]==0)
{
sf++;
c[sf]=i;
viz[i]=1;
}
inc++;
}
for(i=1;i<=sf;i++)
cout<<"";
nr++;
}
int main()
{
f>>n;
citire(m);
for(i=1;i<=n;i++)
if(viz[i]==0) BF(i);
cout<<nr; // ptr problema 2. cout<<nr-1;
return 0;
}
42.
parcurgerea n adncime
#include<iostream>
using namespace std;
int varf,viz[50],a[50][50],m,n,i,j;
void citire()
{
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
}
void DF(int varf)
{
int k;
cout<<varf<<" ";
viz[varf]=1;
for(k=1;k<=n;k++)
if(a[varf][k]==1 && viz[k]==0) DF(k);
}
int main()
{
citire();
cin>>varf;
DF(varf);
return 0;
}
44.
sa se determine componenta conexa maxima
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[50][50],n,viz[50],maxi,i,j;
typedef struct
{
int l,v[50];
} con;
con u[50];
void citire()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
void DF(int vf)
{
int k;
u[i].v[j]=vf;
u[i].l=j;
if(j>maxi) maxi=j;
viz[vf]=1;
j++;
for(k=1;k<=n;k++)
if(a[vf][k]==1 && viz[k]==0) DF(k);
}
int main()
{
int nr=1,k;
citire();
for(i=1;i<=n;i++)
if(viz[i]==0) { j=1; DF(i); nr++; }
cout<<maxi<<endl;
for(i=1;i<=nr;i++)
if(u[i].l==maxi)
{
for(k=1;k<=u[i].l;k++)
cout<<u[i].v[k]<<" ";
cout<<endl;
}
f.close();
return 0;
}
for(i=1;i<=n;i++)
if(gr_ext(i)==0 && gr_int(i)==0) nr++;
return nr;
}
int bucla()
{
int s=0;
for(i=1;i<=n;i++) s=s+a[i][i];
if(s!=0) return 1;
else return 0;
}
int main()
{
citire();
for(i=1;i<=n;i++) cout<<gr_ext(i)<<" ";
cout<<endl;
for(j=1;j<=n;j++) cout<<gr_int(j)<<" ";
cout<<endl<<vf_izolat()<<" varfuri izolate."<<endl;
if(bucla()==1) cout<<"Da";
else cout<<"Nu";
return 0;
}
46.Fiind data matricea vrfuri-arce a unui graf orientat cu n vrfuri si m arce. Sa
se determine:
a. Gradele exterioare ale tuturor vrfurilor.
b. Gradele interioare ale tuturor vrfurilor.
c. Numarul vrfurilor izolate.
#include<iostream>
using namespace std;
int a[50][50],n,i,j,m;
void citire()
{
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
}
int gr_ext(int i)
{
int s;
s=0;
for(j=1;j<=n;j++)
if(a[i][j]==1) s++;
return s;
}
int gr_int(int j)
{
int s;
s=0;
for(j=1;j<=n;j++)
if(a[i][j]==-1) s++;
return s;
}
int vf_izolat()
{
int nr=0;
for(i=1;i<=n;i++)
if(gr_ext(i)==0 && gr_int(i)==0) nr++;
return nr;
}
int main()
{
citire();
for(i=1;i<=n;i++) cout<<gr_ext(i)<<" ";
cout<<endl;
for(i=1;i<=n;i++) cout<<gr_int(j)<<" ";
cout<<endl<<vf_izolat()<<" varfuri izolate."<<endl;
return 0;
}
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
48.algoritmul roy-floyd
#include<iostream>
using namespace std;
int n,m;
long a[50][50];
const long INF=99999;
void citire()
{
int i,j,x,y,c;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j) a[i][j]=0;
else a[i][j]=INF;
for(i=1;i<=m;i++)
{
cin>>x>>y>>c;
a[x][y]=c;
}
}
void generare()
{
int k,i,j;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]>a[i][k]+a[k][j]) a[i][j]=a[i][k]+a[k][j];
}
int main()
{
int i,j;
citire();
generare();
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(a[i][j]==INF) cout<<"* ";
if(hamil(a)==1) cout<<"da";
else cout<<"NU";
return 0;}
51.
Afisarea predecesorilor si muchiilor incidente
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[100][100],n,i,j,m,vf;
typedef struct{
int st,dr;}vector;
vector v[100];
void citire(){
for(i=1;i<=m;i++){ f>>v[i].st>>v[i].dr;
a[v[i].st][v[i].dr]=a[v[i].dr][v[i].st]=1;
}}
void pred(int vf){
for(i=1;i<=n;i++) if(a[i][vf]==1) cout<<i<<" ";
}
void muchii(int vf){
for(i=1;i<=n;i++) if(a[i][vf]==1) cout<<"("<<i<<" , "<<vf<<")"<<" ";
}
int main(){
f>>n>>m;
citire();
f>>vf;
pred(vf);
muchii(vf);
return 0;}
for(i=1;i<=sf;i++) c[i]=0;
}
int main(){
f>>n>>m;
citire();
for(i=1;i<=n;i++) if(viz[i]==0){v[++k]=i;
BF(i);}
for(i=1;i<=k-1;i++) cout<<v[i]<<" "<<v[i+1]<<endl;
return 0;}
57.Graf Eulerian
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int n,i,j,a[100][100],k,st[100],m=0,sem=0;
void citire()
{
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
f>>a[i][j];
if(a[i][j]==1)m++;}
}
int valid(int p)
{
for(i=1;i<p;i++)if(a[st[i]][st[i+1]]==0)return 0;
for(i=1;i<=p-2;i++)
for(j=i+1;j<=p-1;j++)
if(st[i]==st[j]&&st[i+1]==st[j+1]||st[i+1]==st[j]&&st[i]==st[j+1])return
0;
return 1;
}
int final(int p)
{
if(p!=m/2+1)return 0;
if(st[1]!=st[p])return 0;
return 1;
}
void back()
{
int p=1;
st[p]=0;
while(p>0)
if(st[p]<n)
{
st[p]=st[p]+1;
if(valid(p))
if(final(p))
sem=1;
else{p++;st[p]=0;}
}
else p--;
}
int main()
{
citire();
back();
if(sem==1)cout<<"DA e eulerian";
else cout<<"NU e eulerian";
return 0;
}
58.Ciclu verificare
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[100][100],n,v[100],p,i,j;
void citire()
{
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)f>>a[i][j];
f>>p;p++;
for(i=1;i<=p;i++)f>>v[i];
}
int ver()
{
if(v[1]!=v[p])return 0;
for(i=1;i<p;i++)if(a[v[i]][v[i+1]]==0)return 0;
for(i=1;i<=p-2;i++)
for(j=i+1;j<=p-1;j++)
if(v[i]==v[j]&&v[i+1]==v[j+1]||v[i]==v[j+1]&&v[i+1]==v[j])return 0;
for(i=1;i<=p-2;i++)
for(j=i+1;j<=p-1;j++)if(v[i]==v[j])return 2;
return 1;
}
int main()
{
int x;
citire();
x=ver();
if(x==0)cout<<"Nu";
else if(x==1)cout<<"Da(elementar)";
else cout<<"Da(Neelementar)";
return 0;
}
59.Componenta conexa la distanta cea mai vare de vf1
void BF(int start){
int inc,sf,x,nr=0;
viz[start]=1;
inc=sf=1;
c[inc]=start;
while(inc<=sf){x=c[inc];
for(i=1;i<=n;i++) if(a[x][i]==1 && viz[i]==0){
sf++;
c[sf]=i;
viz[i]=1;
aux[i]=nr;}
inc++;}
}
int main(){
f>>n>>m;
citire();
BF(1);
aux[1]=0;
maxi=aux[1];
for(i=2;i<=n;i++) if(maxi<aux[i]) maxi=aux[i];
for(i=1;i<=n;i++) if(maxi==aux[i]) cout<<i<<" ";
return 0;}
60.Doua grafuri g1,g2.Sa se verifice daca g1 este graf partial al grafului g2
#include <iostream>
using namespace std;
int g1[100][100],g2[100][100],n,i,j;
void citire(int a[100][100]){
for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>a[i][j];}
int verif(int g1[100][100],int g2[100][100])
{
for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i<j) if(g2[i][j]==1 && g1[i][j]==0)
return 0;
return 1;
}
int main(){
cin>>n;
citire(g1);
citire(g2);
if(verif(g1,g2)==1) cout<<"partial";
else cout<<"nu";
return 0;}
61.Circuit
#include<iostream>
#include<fstream>
int verificare(){
for(i=1;i<k;i++) if(a[v[i]][v[i+1]]==0) return 0;
for(i=1;i<=k-1;i++) for(j=i+1;j<=k;j++) if(v[i]!=v[j]) return 2;
return 1;}
int main(){
f>>n;
citire();
citire_secv();
if(verificare()==0) cout<<"nu e drum";
else if(verificare()==1) cout<<"elementar";
else cout<<"neelementar";
return 0;}
63.Transformarea matricii vf arce in matricea de adiacenta
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int i,j,n,m,a[100][100],b[100][100],x,y;
void citire(int n , int m)
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)f>>a[i][j];
}
void matricedeadiacenta()
{
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(a[j][i]==1)x=j;
if(a[j][i]==-1)y=j;
}
b[x][y]=1;
}
}
int main ()
{
f>>n>>m;
citire(n,m);
matricedeadiacenta();
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)cout<<b[i][j]<< " ";
cout<<endl;
}
return 0 ;
}
64.Numarul varfurilor izolate
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[100][100],m,n,i,j;
void citire(){
f>>n;
for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>a[i][j];}
void vf_iz(){
int sem,k,nr=0;
for(i=1;i<=n;i++){ sem=0;
for(j=1;j<=n;j++) if(a[i][j]==1) sem=1;
if(sem==0) for(k=1;k<=n;k++) if(a[k][i]==1) sem=1;
if(sem==0) nr++;}
cout<<nr;}
int main(){
citire();
vf_iz();
return 0;}
65.Gradele exterioare ale tuturor varfurilor
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
int a[100][100],m,n,i,j;
void citire(){
f>>n;
for(i=1;i<=n;i++) for(j=1;j<=n;j++) f>>a[i][j];}
void vf_ext(){
int s;
for(i=1;i<=n;i++){s=0;
for(j=1;j<=n;j++) s+=a[i][j];
cout<<i<<" "<<s<<endl;}}
int main(){
citire();
vf_ext();
return 0;}
67.Lant
#include<iostream>
#include<fstream>
using namespace std ;
ifstream f("date.in");
typedef struct
{
void vf_iz(){
int gasit,nr=0;
for(i=1;i<=n;i++) {gasit=0;
for(j=1;j<=n;j++) if(a[i][j]==1 ||a[j][i]==(-1)){gasit=1;
break;}
if(gasit==0) nr++;}
cout<<nr;}
int main(){
f>>n;
citire();
vf_iz();
return 0;}
69.Divide et impera : suma nr pare
#include <iostream>
using namespace std;
int n,v[100],i;
int divide(int p ,int q) {
int m,s1,s2;
if(p==q) if(v[p]%2==0) return v[p];
else return 0;
else{ m=(p+q)/2;
s1=divide(p,m);
s2=divide(m+1,q);
return s1+s2;}}
int main(){
cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
cout<<divide(1,n);
return 0;}
int m,s1,s2;
if(p==q) if(p%2==1) return v[q];
else return 0;
else{ m=(p+q)/2;
s1=divide(p,m);
s2=divide(m+1,q);
return s1+s2;}
}
int main(){
cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
cout<<divide(1,n);
return 0;}
73.Divide et impera: produs
#include<iostream>
using namespace std;
int v[100],i,n;
int divide(int p , int q){
int m,s1,s2;
if(p==q) return v[p];
else{ m=(p+q)/2;
s1=divide(p,m);
s2=divide(m+1,q);
return s1*s2;}
}
int main(){
cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
cout<<divide(1,n);
return 0;}
else{ m=(p+q)/2;
s1=divide(p,m);
s2=divide(m+1,q);
if(s1<s2) return s1;
else return s2;}}
int main(){
cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
cout<<divide(1,n);
return 0;}
int main(){
cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
cout<<divide(1,n);
return 0;}
else return 0;
else{ m=(p+q)/2;
s1=divide(p,m);
s2=divide(m+1,q);
return s1+s2;}
}
int main(){
cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
cout<<divide(1,n);
return 0;}
77.Se citeste un arbore cu n noduri dat prin vectorul tata.Sa se afiseze muchiile
arborelui si sa se construiasca si sa se afiseze
matricea de adiacenta a arborelui
#include<iostream.h>
#include<fstream.h>
ifstream f("date.in");
int T[100],i,n,a[100][100],j;
void citire()
{ for(i=1;i<=n;i++) f>>T[i];}
void matrice()
{ for(i=2;i<=n;i++) cout<<i<<" "<<T[i]<<endl;
for(i=1;i<=n;i++) {a[i][T[i]]=1;
a[T[i]][i]=1;}
for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<a[i][j]<<" ";
cout<<endl;}
}
int main()
{ f>>n;
citire();
matrice();
return 0;}
nod *st,*dr;}TNOD;
TNOD *r;
void creare(TNOD *&r)
{ int x;
f>>x;
if(!x) r=NULL;
else { r=new TNOD;
r->info=x;
creare(r->st);
creare(r->dr);}
}
void RSD(TNOD *r)
{ if(r) { g<<r->info<<" ";
RSD(r->st);
RSD(r->dr);}
}
void SRD(TNOD *r)
{ if(r) {SRD(r->st);
g<<r->info<<" ";
SRD(r->dr);}
}
void SDR(TNOD *r)
{ if(r) { SDR(r->st);
SDR(r->dr);
g<<r->info<<" ";}
}
int main()
{ r=NULL;
creare(r);
g<<"RSD:";
RSD(r);
g<<endl;
g<<"SRD:";
SRD(r);
g<<endl;
g<<"SDR:";
SDR(r);
return 0;}
#include<iostream.h>
#include<fstream.h>
ifstream f("date.in");
ofstream g("date.out");
int nr;
typedef struct nod
{int info;
nod *st,*dr;}TNOD;
TNOD *r;
int perfect(int x)
{ int d,s=0;
for(d=1;d<=x/2;d++) if(x%d==0) s=s+d;
if(s==x) return 1;
else return 0;}
void creare(TNOD *&r)
{ int x;
f>>x;
if(!x) r=NULL;
else { r=new TNOD;
r->info=x;
creare(r->st);
creare(r->dr);}
}
void RSD(TNOD *r)
{
if(r) { if(perfect(r->info)==1)nr++;
RSD(r->st);
RSD(r->dr);}
}
int main()
{ r=NULL;
creare(r);
RSD(r);
g<<nr;
return 0;}
return 1;}
void creare(TNOD *&r)
{ int x;
f>>x;
if(!x) r=NULL;
else { r=new TNOD;
r->info=x;
creare(r->st);
creare(r->dr);}
}
void RSD(TNOD *r)
{ if(r) { if(prim(r->info)==1)g<<r->info<<" ";
RSD(r->st);
RSD(r->dr);}
}
int main()
{ r=NULL;
creare(r);
RSD(r);
return 0;}
creare(r->dr);}
}
void RSD(TNOD *r)
{ if(r) { if(palindrom(r->info)==0)sem=0;
RSD(r->st);
RSD(r->dr);}
}
int main()
{ r=NULL;
creare(r);
RSD(r);
if(sem==1) g<<"da";
else g<<"nu";
return 0;}
82.Se citeste un arbore cu n varfuri repr prin vectorul de tati.Sa se afiseze
frunzele arborelui
#include<iostream.h>
int main()
{ int viz[50],T[50,i,n;
cin>>n;
for(i=1;i<=n;i++) { cin>>T[i];
viz[T[i]]=1;}
for(i=1;i<=n;i++) if(viz[i]!=1) cout<<i<<" ";
return 0; }
#include<iostream.h>
int T[100],i,j,n;
void frati()
{for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(T[i]==T[j] && i!=j)cout<<i<<"
"<<j<<endl;
}
int main()
{ int viz[50],T[50,i,n;
cin>>n;
for(i=1;i<=n;i++) cin>>T[i];
frati();
return 0; }
#include<iostream.h>
typedef struct nod
{
int info;
nod *st,*dr;
}TNOD;
TNOD *r;
int viz[100],aux=1;
void creare(TNOD *&r)
{
int x;
cin>>x;
if(!x)r=NULL;
else
{
r=new TNOD;
r->info=x;
cout<<"Succesorul stang al lui "<< x<<": ";
creare(r->st);
cout<<"Succesorul drept al lui "<< x<<": ";
creare(r->dr);
}
}
void RSD(TNOD *r)
{
if(r){viz[r->info]=aux;
aux=aux+1;
RSD(r->st);
RSD(r->dr);
aux=aux-1;
}
}
int main()
{
int n,i,s=0;
r=NULL;
creare(r);
RSD(r);
cin>>n;
for(i=1;i<=12;i++)
if(viz[i]==n)s+=i;
cout<<s;
return 0;
#include<iostream.h>
typedef struct nod
{
int info;
nod *st,*dr;
}TNOD;
TNOD *r;
int viz[100],aux=1;
void creare(TNOD *&r)
{
int x;
cin>>x;
if(!x)r=NULL;
else
{
r=new TNOD;
r->info=x;
cout<<"Succesorul stang al lui "<< x<<": ";
creare(r->st);
cout<<"Succesorul drept al lui "<< x<<": ";
creare(r->dr);
}
}
void RSD(TNOD *r,int niv,int x)
{
if(r){if(niv==x) cout<<r->info<<" ";
RSD(r->st,niv+1,x);
RSD(r->dr,niv+1,x);
}
}
int main()
{
int n,i,x;
cin>>x;
r=NULL;
creare(r);
RSD(r);
cin>>n;
return 0;
}
if(!x)r=NULL;
else
{
r=new TNOD;
r->info=x;
cout<<"Succesorul stang al lui "<< x<<": ";
creare(r->st);
cout<<"Succesorul drept al lui "<< x<<": ";
creare(r->dr);
}
}
int pp(int x)
{
int s=1,i;
for(i=2;i<=x/2;i++)if(x%i==0)s+=i;
if(x%s==0)return 1;
else return 0;
}
void RSD(TNOD *r)
{
if(r){if(pp(r->info))cout<<r->info<<" ";
RSD(r->st);
RSD(r->dr);
}
}
int main()
{
r=NULL;
creare(r);
RSD(r);
return 0;
}
}
else if(x>p->info) creare(p->dr,x);
else if(x<p->info) creare(p->st,x);
else cout<<"Exista";
}
void SRD(TNOD *p)
{ if(p) { SRD(p->st);
cout<<p->info<<" ";
SRD(p->dr);}
}
int main()
{
cin>>x;
while(x!=0) { creare(p,x);
cin>>x;}
SRD(p);
delete(p);
return 0; }
{ int i,x,y,l,R[100],k,nr_m;
for(i=1;i<=m;i++) R[i]=i;
l=1;
cost=0;
nr_m=0;
while(l<=m ||nr_m<n-1) { x=v[l].st;
y=v[l].dr;
if(R[x]!=R[y]) { nr_m++;
cout<<"("<<x<<","<<y<<")"<<endl;
cost=cost+v[l].c;
for(k=1;k<=n;k++) if(R[k]==R[y]) R[k]=R[x];}
l++;}
if(nr_m<n-1) cout<<"Nu se poate construi arborele.";
else cout<<cost;
}
int main()
{ citire();
sortare();
kruskal();
return 0; }
{
int s=0;
for(int i=1;i<=n;i++) s=s+v[i];
return s;
}
void Prim()
{
int x,i,j,a,b,min,gasit;
cout<<"De la ce nod doresti sa incepi editarea: ";
cin>>x;
v[x]=1;
nv[x]=0;
do
{
min=3200;
gasit=0;
for(i=1;i<=n;i++) if(v[i]==1) for(j=1;j<=n;j++) if(nv[j]==1) if(cost[i][j]!=0
&& cost[i][j]<min) {
min=cost[i][j];
a=i;
b=j;
gasit=1;
}
if(gasit) cout<<"("<<a<<" ; "<<b<<")"<<endl;
v[b]=1;
nv[b]=0;
}while(gata()!=n && gasit);
}
int main()
{
citire();
n_viz();
Prim();
return 0;
}