Estratto del documento

Definizione della struttura del grafo

#include <iostream.h>

typedef struct adiacenti

{ int x;

adiacenti *right;

}adiacenti;

typedef struct nodo

{ int x;

nodo *down;

adiacenti *right;

}nodo;

class grafo

{ nodo *first;

void distr_nodi(nodo* &p);

void distr_adiacenti(adiacenti* &p);

void print_nodi(nodo* & p);

void print_adiacenti(adiacenti* &p);

void ins_nodo(nodo* &p);

void copy_nodo (nodo *v,nodo * &n);

void copy_adiac (adiacenti *v,adiacenti* &n);

void ins_arc(adiacenti* &p,int a);

void trova_nodo(nodo* &p,int n);

void canc_arc(adiacenti* &p,int a);

void dept_ferst1(int start,int *mark);

static void somma_adiac(int y,adiacenti * &p);

static void somma_nodo (int y,nodo* &p);

public:

grafo operator +(int n);

grafo();

int numnodi;

~grafo();

void stampa();

void insnodo();

void insarc(int n,int a);

void cancarc(int n,int a);

grafo operator = (grafo op);

grafo (grafo & op);

void dept_ferst(int start);

void visita(adiacenti* &p,int *mark);

};

Visita in profondità

//deptfirst

void grafo::visita(adiacenti* &p,int *mark)

{if(p!=NULL)

{if(mark[p->x-1]==0)

{dept_ferst1(p->x,mark);

visita(p->right,mark);

}

}

}

void grafo::dept_ferst(int start)

{int *mark=new int[numnodi];

for(int i=1;i<=numnodi;i++)

mark[i]=0;

dept_ferst1(start,mark);

}

void grafo::dept_ferst1(int start,int *mark)

{if(mark[start-1]==0)

{mark[start-1]=1;

nodo* tmp=first;

trova_nodo(tmp,start);

visita(tmp->right,mark);

}

}

Copia degli elementi

Metodo privato per la copia degli adiacenti

//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

//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;

}

Somma degli elementi

Somma con gli adiacenti

//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);

}

}

Somma con i nodi

//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 di somma

//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;

}

}

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
Sintesi

Grafo

Semplice programma che permette di creare, modificare, eliminare, insomma di lavorare su un grafo. Il linguaggio C++.

D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi