Implementación de la estructura Grafo en C++
Graf.h
Graf.cpp
class CGraf {
private:
int NumNodes;
int *array;
public:
inline CGraf() { array=NULL; }
inline ~CGraf() { delete []array; }
CGraf(int dim);
CGraf(const CGraf &copia); //Constructor de copia
CGraf& operator=(CGraf &copia); //Sobrecarrega operador =
int &operator()(int i, int j); //Sobrecarrega operador ()
friend istream& operator>>(istream& is, CGraf &copia); //Sobrecarrega operador >>
inline int GetNumNodes() { return NumNodes; } //Retorna num de nodes
CNodeList GetNeighbourgs(int Index);
};Graf.cpp
#include "Graf.h"
CGraf::CGraf(int dim) {
NumNodes=dim;
array=new int[NumNodes*NumNodes];
for(int i=0; i<(NumNodes*NumNodes); i++) {
array[i]=0;
}
}
CGraf::CGraf(const CGraf &copia) {
this->NumNodes=copia.NumNodes;
this->array=new int[NumNodes*NumNodes];
for(int i=0; i<(NumNodes*NumNodes); i++) {
this->array[i]=copia.array[i];
}
}
CGraf& CGraf::operator=(CGraf &copia) {
if(this!=&copia) {
delete []array;
NumNodes=copia.NumNodes;
array=new int[NumNodes*NumNodes];
for(int i=0; i<(NumNodes*NumNodes); i++) {
array[i]=copia.array[i];
}
}
return *this;
}
istream& operator>>(istream &is, CGraf &copia) {
delete []copia.array;
is >> copia.NumNodes;
copia.array=new int[copia.NumNodes*copia.NumNodes];
for(int i=0; i<(copia.NumNodes*copia.NumNodes); i++) {
is >> copia.array[i];
}
return is;
}
int& CGraf::operator()(int i, int j) {
return (array[NumNodes*i+j]);
}
CNodeList CGraf::GetNeighbourgs(int Index) {
CNodeList llista;
for(int i=0; i<NumNodes; i++) {
if(this->operator()(i,Index)>0) {
//recorrem la columna Index
llista.PushBack(i);
}
}
return llista;
}

