Anteprima
Vedrai una selezione di 3 pagine su 6
Programma C++ - Grafo Pag. 1 Programma C++ - Grafo Pag. 2
Anteprima di 3 pagg. su 6.
Scarica il documento per vederlo tutto.
Programma C++ - Grafo Pag. 6
1 su 6
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Sintesi
Grafo

Semplice programma che permettee di creare modificare eliminare ,insomma di lavorare su un grafo.Il linguaggio C++.
Estratto del documento

{mark[start-1]=1;

nodo* tmp=first;

trova_nodo(tmp,start);

visita(tmp->right,mark);

}

}

//metodo privato per la copia degli adiacenti

void grafo::copy_adiac(adiacenti *v,adiacenti * &n)

{if (v!=NULL)

{n=new adiacenti;

n->x=v->x;

copy_adiac(v->right,n->right);

}

else n=v;

}

//metodo privato per la copia dei nodi

void grafo::copy_nodo(nodo * v,nodo* &n)

{if(v!=NULL)

{n=new nodo;

n->x=v->x;

copy_adiac(v->right,n->right);

copy_nodo(v->down,n->down);

}

else n=v;

}

//procedura privata per la somma di y con adiacenti

void grafo:: somma_adiac(int y,adiacenti* &p)

{if(p!=NULL)

{p->x=p->x+y;

somma_adiac(y,p->right);

}

}

//procedura privata per la somma di y con i nodi

void grafo::somma_nodo(int y,nodo* &p)

{if(p!=NULL)

{p->x=p->x+y;

somma_adiac(y,p->right);

somma_nodo(y,p->down);

}

}

//overloading dell'operatore +:somma l'intero passato con tutti gli elementi del

grafo

grafo grafo ::operator +(int n)

{if (first!=NULL)

{grafo tmp=*this;

somma_nodo(n,tmp.first);

return tmp;

}

}

void grafo::cancarc(int n,int a)

{ nodo *tmp=first;

trova_nodo(tmp,n);

canc_arc(tmp->right,a);

};

void grafo::canc_arc(adiacenti* &p,int a)

{ if(p!=NULL)

{ canc_arc(p->right,a);

if(p->x==a)

{ adiacenti *tmp=p->right;

delete p;

p=tmp;

}

}

};

grafo::grafo()

{ first=NULL;

numnodi=0;

};

grafo::~grafo()

{ distr_nodi(first);

};

void grafo::distr_nodi(nodo* &p)

{ if (p!=NULL)

{ distr_nodi(p->down);

distr_adiacenti(p->right);

delete p;

}

};

void grafo::distr_adiacenti(adiacenti* &p)

{ if(p!=NULL)

{ distr_adiacenti(p->right);

delete p;

}

};

//Procedure per stampare un grafo

void grafo::stampa()

{ if (first!=NULL) print_nodi(first);

else cout<<"Grafo vuoto!";

};

void grafo::print_nodi(nodo* &p)

{

if(p!=NULL)

{

cout<<"Nodo "<<p->x<<endl;

print_adiacenti(p->right);

print_nodi(p->down);

}

};

void grafo::print_adiacenti(adiacenti* &p)

{

if(p!=NULL)

{

cout<<"adiacente a "<<p->x<<endl;

print_adiacenti(p->right);

}

};

//overloading dell'operatore =

grafo grafo:: operator = (grafo op)

{if(op.first!=NULL)

{distr_nodi(first);

copy_nodo(op.first,first);

return *this;

}

else {first=NULL;

return *this;

}

}

//costruttore copy

grafo::grafo(grafo & op)

{if(op.first!=NULL)

{copy_nodo(op.first,first);

}

else {first=NULL;

cout<<"\n grafo vuota(vista dal costruttore copy)";

}

}

//Procedure per l'inserimento di un nodo

void grafo::insnodo()

{

ins_nodo(first);

};

void grafo::ins_nodo(nodo* &p)

{

if(p!=NULL) ins_nodo(p->down);

else

{ p=new nodo;

numnodi++;

p->x=numnodi;

p->right=NULL;

p->down=NULL;

}

};

void grafo::ins_arc(adiacenti* &p,int a)

{ if(p!=NULL)

ins_arc(p->right,a);

else

{ p=new adiacenti;

p->x=a;

p->right=NULL;

}

};

void grafo::insarc(int n,int a)

{

nodo* tmp=first;

trova_nodo(tmp,n);

ins_arc(tmp->right,a);

};

void grafo::trova_nodo(nodo* &p,int n)

{

if(p->x!=n && p!=NULL)

{ p=p->down;

trova_nodo(p,n);

}

};

main ()

{ int sc=1,x,a;

grafo g,f;

while(sc!=0)

{ cout<<" *** GRAFO 1.73 *** "<<endl;

cout<<"-----------------MENU----------------"<<endl;

cout<<"Inserisci un nodo nel grafo 1"<<endl;

cout<<"Inserisci un arco nel grafo 2"<<endl;

cout<<"Visualizza il grafo 3"<<endl;

cout<<"Cancella un arco 4"<<endl;

cout<<"Overloading di = 5"<<endl;

cout<<"Costruttore copy 6"<<endl;

cout<<"Overloading di + 7"<<endl;

cout<<"depth_first 8"<<endl;

cout<<"Esci 0"<<endl;

cout<<"EFFETTUA UNA SCELTA: "<<endl;

cin>>sc;

switch(sc)

{ case 1:g.insnodo();

cout<<"E' stato inserito il nodo numero "<<g.numnodi<<endl;

break;

case 2:cout<<"Inserisci la coda dell'arco: "<<endl;

cin>>x;

cout<<"Inserisci la testa dell'arco: "<<endl;

cin>>a;

g.insarc(x,a);

break;

case 3:cout<<"Visualizzazione del grafo: "<<endl;

g.stampa();

break;

case 4:cout<<"Inserisci la coda dell'arco da cancellare: "<<endl;

cin>>x;

cout<<"Inserisci la testa dell'arco da cancellare: "<<endl;

cin>>a;

g.cancarc(x,a);

break;

case 5:f=g;

cout<<"Overloading dell'operatore d'assegnamento... "<<endl,

f.stampa();

break;

case 7:cout<<"Inserisci il numero da sommare a tutti i nodi del

grafo:"<<endl;

cin>>x;

cout<<"Overloading..."<<endl;

g=g+x;

break;

case 8:g.dept_ferst(g.numnodi);

break;

case 6:grafo k(g);

cout<<"Uso del costruttore di copie..."<<endl;

k.stampa();

Dettagli
Publisher
6 pagine
305 download