0% found this document useful (0 votes)
16 views5 pages

Programe

The document describes an algorithm for finding the minimum spanning tree of a graph using Prim's algorithm. It includes code to read in the graph from a file, initialize necessary data structures like parent pointers and costs, and iteratively find the minimum cost edge to connect each unvisited node to the growing minimum spanning tree until all nodes are visited.

Uploaded by

Aura Melente
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)
16 views5 pages

Programe

The document describes an algorithm for finding the minimum spanning tree of a graph using Prim's algorithm. It includes code to read in the graph from a file, initialize necessary data structures like parent pointers and costs, and iteratively find the minimum cost edge to connect each unvisited node to the growing minimum spanning tree until all nodes are visited.

Uploaded by

Aura Melente
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/ 5

#include <iostream> }

#include <fstream> cout<<"Arborele de cost minim este: "<<endl;

using namespace std; for(int i=1;i<=n;i++)

int a[100][100],tata[10000],oo=100000,n; {

bool viz[10000]; cout<<tata[i]<<" "<<i<<" "<< a[i][tata[i]]<<endl;

ifstream in("graf.txt"); }

void Prim(int nod_start) //cout<<c<<endl;

{int i,j,p,min,k; }

viz[nod_start]=1; //marcam nodul de start vizitat int main()

for(i=1;i<=n;i++) { int i,j,C,x;

tata[i]=nod_start; in>>n;

tata[nod_start]=0;// initializam vectorul de tati for(int i=1;i<=n;i++)

for(k=1;k<=n-1;k++) for(int j=1;j<=n;j++)

{min=oo; //minimul este initializat cu infinit if(i!=j) a[i][j]=a[j][i]=oo;

p=0; while(in>>i>>j>>C)

for(i=1;i<=n;i++) a[i][j]=a[j][i]=C;

{if(!viz[i] && a[i][tata[i]]<min) //cautam un nod nevizitat cout<<"Nod de start = ";


si il comparam cu minimul
cin>>x;
{min=a[i][tata[i]];
Prim(x);
p=i;//retinem nodul in variabila p
}
};
7
viz[p]=1; //il marcam vizitat la sfarsit
123
}
153
for(i=1;i<=n;i++)
234
if(!viz[i] && a[i][tata[i]]>=a[i][p])
246
tata[i]=p;
252
cout<<endl;
377
cout<<"TATA:";
461
for(i=1;i<=n;i++) cout<<tata[i]<<" ";
475
cout<<endl;
561
cout<<"VIZIT";
672
for(i=1;i<=n;i++) cout<<viz[i]<<" ";

cout<<endl;
#include<iostream> //memorarea arborelui prin vectorii S,D

using namespace std; for(i=1;i<=n;i++)

#define N 30 {

int S[N],D[N],rad,n; cout<<"descendentii stanga,dreapta


("<<i<<"): ";
void SRD(int k) //parcurgere inordine
cin>>S[i]>>D[i];
{
}
if(S[k]) SRD(S[k]);
cout<<"\n\tParcurgerea in preordine:\n";
cout<<k<<" ";
RSD(rad);
if(D[k]) SRD(D[k]);
cout<<"\n\n\tParcurgerea in inordine:\n";
}
SRD(rad);
void RSD(int k) //parcurgere preordine
cout<<"\n\n\tParcurgerea in postordine:\n";
{
SDR(rad);
cout<<k<<" ";
cout<<"\n";
if(S[k]) RSD(S[k]);
return 0;
if(D[k]) RSD(D[k]);
}
}

void SDR(int k) //parcurgere postordine

if(S[k]) SDR(S[k]);

if(D[k]) SDR(D[k]);

cout<<k<<" ";

int main()

int i;

cout<<"numar varfuri, n=";

do{

cin>>n;

}while(n<1||n>N);

cout<<"radacina arborelui: ";

do{

cin>>rad;

}while(rad<1||rad>n);
Arbore cu radacina for(i=0;i<p->n;i++) Preordine(p-
>leg[i]); //afisez descendentii
#include<iostream>
}
using namespace std;
}
#define NMAX 30 //numarul maxim de descendenti ai
unui nod void Postordine(ARB *p) //afiseaza nodurile in
postordine
typedef struct nod{
{
int inf;
int i;
int n; //numarul de descendenti
if(p)
nod *leg[NMAX]; //tabloul adreselor
descendentilor {

}ARB; for(i=0;i<p->n;i++)

ARB *coada[100]; //coada pentru parcurgerea pe nivele if(p->leg[i]) Postordine(p->leg[i]);


//afisez descendentii
int prim,ultim; //pentru gestionarea cozii
cout<<p->inf<<" "; //afisez nodul tata
ARB* Creare() //creaza arborele oarecare si returneaza
adresa radacinii }

{ }

int info,nr,i; ARB *p; void Adauga(ARB *p) //adauga un nod in coada

cout<<"informatia nodului: "; cin>>info; {

p=new ARB; p->inf=info; if(prim>ultim) cout<<"Coada este plina\n";

cout<<"numarul descendentilor pentru else coada[ultim++]=p;


"<<info<<": ";
}
cin>>nr; p->n=nr;
ARB* Extrage_nod() //extrage un nod din coada
//se descriu in ordine descendentii de la stanga la
{
dreapta si in adancime
if(prim==ultim) return 0;
for(i=0;i<p->n;i++) p->leg[i]=Creare();
else return coada[prim++];
//apelez recursiv functia pentru crearea
descendentilor }
return p; //radacina arborelui void Traversare_nivele(ARB *rad)
} {
void Preordine(ARB *p) //afiseaza nodurile in preordine ARB *p; int i;
{ prim=ultim=0;
int i; Adauga(rad); //in coada se introduce nodul
radacina
if(p)
do{
{

cout<<p->inf<<" "; //afisez nodul tata


p=Extrage_nod(); //extrag un nod din
coada

if(p)

cout<<p->inf<<" "; //afisez


informatia nodului

for(i=0;i<p->n;i++)

Adauga(p->leg[i]);
//adaug in coada descendentii nodului

}while(p);

cout<<"\n";

void Sterge(ARB *p) //stergerea unui nod din arbore

int i;

if(p)

for(i=0;i<p->n;i++) Sterge(p->leg[i]);

//mai intai sterg descendentii nodului

delete p; //sterg nodul tata

int main()

ARB *rad; //radacina arborelui oarecare

cout<<"\n\t\tIntroduceti arborele:\n";

rad=Creare(); //arborele a fost creat

cout<<"\n\t\tTraversarea in preordine:\n";

Preordine(rad);

cout<<"\n\t\tTraversarea in postordine:\n";

Postordine(rad);

cout<<"\n\t\tTraversarea pe nivele:\n";

Traversare_nivele(rad);

Sterge(rad); //stergerea arborelui din heap

return 0; }

You might also like