PDA

Visualizza la versione completa : [c++] grafo - funzione merge


matteo martis
17-02-2013, 13:36
Salve,
ho realizzato un grafo. In questa struttura manca la funzione merge il cui protototipo è
il seguente:


void merge(MGraph grafo);

Il problema di questa funzione è che l'instanza di MGraph che invoca questo metodo deve poter prendere le informazioni memorizzate all'intero del'istanza di MGraph presa come parametro. La soluzione più ovvia a questo problema sarebbe usare 'friend', ma una classe, a quanto ho capito dal mio compilatore, non può essere friend di se stessa.
Come si può risolvere questo problema?
di seguito la classe MGraph affinchè possiate contestualizzare il problema:


/*
Questa classe implementa la struttura grafo(non-)orientato realizzato mediante matrice di
adiacenza
Il puntatore a puntatore Matrix rappresenta la matrice di adiacenza nella quale sono memorizzati
gli archi
Il puntatore AVertex rappresenta il vettore in cui sono memorizzate le informazioni sui
vettori
La variabile size indica la dimensione reale del vettore e della matrice
La variabile Vsize indica il numero di vertici presenti nel grafo
La variabile Asize indica il numero di archi presenti nel grafo
Il valore booleano oriented indica se il grafo è orientato o meno
AType e VType indicano rispettivamente il tipo di valore dell'arco è il valore del vertice
MArc e MVertex sono rispettivamente il nodo-arco e il nodo-vertice
*/
template<class AType, class VType>
class MGraph: public Graph<AType,VType>{
private:
MArc<AType> ** Matrix;
MVertex<VType> * AVertex;

int size;
int Vsize;
int Asize;

bool oriented;

int getPos(VType v);
public:
MGraph(bool orientation);
~MGraph();

bool isEmpty();
int getNumArc();
int getNumVertex();
bool isAdjacent(VType vert1, VType vert2);
void insertVertex(VType vert);
void insertArc(VType vert1,VType vert2,AType arc);
void removeVertex(VType vert);
void removeArc(VType vert1,VType vert2);
};

Grazie!

matteo martis
19-02-2013, 11:46
up

Loading