//一个书上经典的图--矩阵实现方式
#ifndef GRAPHAIM_H
#define GRAPHAIM_H#include <stdlib.h>
#include "GraphADT.h"
#define UNVISITED 0
#define VISITED 1
/*
class Edge
{
public:
int vertex,weight;
Edge() {vertex=-1;weight=-1;}
Edge(int v,int w) {vertex=v;weight=w;}
};
*/class Graphm:public Graph
{ //Implement adjacent matrix
private:
int numVertex,numEdge; //Store number of vertices,edges
int **matrix; //Pointer to adjacency matrix
int *; //记录被访问的点
public:
Graphm(int);
Graphm(const Graphm&);
virtual ~Graphm();
int n() {return numVertex;} //Number of vertices
int e() {return numEdge;} //Number of edges
int first(int);
int next(int,int);
//Set edge (v1,v2) to wgt
void setEdge(int v1,int v2,int wgt)
{
if (matrix[v1][v2]==0) numEdge++;
matrix[v1][v2]=wgt;
}
void delEdge(int v1,int v2)
{ //Delete edge (v1,v2)
if (matrix[v1][v2]!=0) numEdge--;
matrix[v1][v2]=0;
}
int weight(int v1,int v2) { return matrix[v1][v2];}
int getMark(int v) {return [v];}
void setMark(int v,int val) {[v]=val;}
Graphm& operator=(const Graphm&);
};Graphm::Graphm(int numVert)
{ //Make graph w/ numbVert vertices
int i,j;
numVertex=numVert;
numEdge=0;
=new int[numVert]; //Initialize  array
if(NULL==)
exit(1);
for (i=0; i<numVertex; i++)
[i]=UNVISITED;
matrix=(int**) new int*[numVertex]; //Make matrix
if(NULL==matrix)
exit(1);
for (i=0; i<numVertex; i++)
{
matrix[i]=new int[numVertex];
if(NULL==matrix[i])
exit(1);
}
for (i=0; i<numVertex; i++) //Edge start w/ 0 weight
for (j=0; j<numVertex; j++)
matrix[i][j]=0;
}
Graphm::Graphm(const Graphm& grp)
{
int i,j;
numVertex=grp.numVertex;
numEdge=grp.numEdge;
=new int[numVertex];
if(NULL==)
exit(1);
for(i=0; i<numVertex; i++)
[i]=grp.[i];
matrix=(int**) new int*[numVertex]; //same
if(NULL==matrix)
exit(1);
for(i=0; i<numVertex; i++)
{
matrix[i]=new int[numVertex];
if(NULL==matrix[i])
exit(1);
}
for(i=0; i<numVertex; i++)
for(j=0; j<numVertex; j++)
matrix[i][j]=grp.matrix[i][j];
}
//好像是析构出现了问题,但不知道是什么问题
Graphm::~Graphm()
{ //Destructor
delete [] ; //Return dynamically allocated memory
for (int i=0; i<numVertex; i++)
delete [] matrix[i];
delete [] matrix; 
}
int Graphm::first(int v)
{
int i;
for (i=0;i<numVertex;i++)
if (matrix[v][i]!=0) return i;
return i; //Return n if none
}
int Graphm::next(int v1,int v2)
{ //Get v1's neighbor after v2
int i;
for (i=v2+1;i<numVertex;i++)
if (matrix[v1][i]!=0) return i;
return i;
}
Graphm& Graphm::operator =(const Graphm& grp)
{
if(this==&grp)
return *this;
int i,j;
numVertex=grp.numVertex;
numEdge=grp.numEdge;
delete [] ;
=new int[numVertex];
if(NULL==)
exit(1);
for(i=0; i<numVertex; i++)
[i]=grp.[i];
for(i=0; i<numVertex; i++)
delete [] matrix[i];
delete [] matrix;
matrix=(int**) new int*[numVertex]; //same
if(NULL==matrix)
exit(1);
for(i=0; i<numVertex; i++)
{
matrix[i]=new int[numVertex];
if(NULL==matrix[i])
exit(1);
}
for(i=0; i<numVertex; i++)
for(j=0; j<numVertex; j++)
matrix[i][j]=grp.matrix[i][j];
return *this;
}
#endif
主函数是这样的:
void main {
   Graphm mtrix(10);
   mtrix.setEdge(1,2,1);
   cout << "c" << endl;
}
程序运行的时候跳出c以后就弹出debug对话框了