基本思想:
图由顶点和边构成,则需要分别存储顶点和边,边又依附于点,还需存储点与边的逻辑关系。
用一个一维数组来存储图中的所有顶点。
再用一个二维数组来存储图的邻接矩阵,(邻接矩阵行列分别为第1个到第n个顶点),若两个顶点有边,则邻接矩阵 该行列 的值为1,无边则为0;
具体代码体现:
const int maxsize=10;
template<class T>
class Graph{
public:
Graph(T a[],int n,int e)//构造函数,输入顶点数据,顶点个数,边的个数;
{
vertexnum=n;edge=e; //点,边个数赋值;
for(int i=0;i<vertexnum;i++){
vertex[i]=a[i]; //顶点数据赋值
}
for(int i=0;i<vertexnum;i++){
for(int j=0;j<vertexnum;j++){
arc[i][j]=0; //双重循环,初始化邻接矩阵,使矩阵元素全为0;
}
}
for(int k=0;k<edgenum;k++){ //循环边的条数次,目的是输入每条边
int i,j;
cin>>i>>j; //输入每条边依附的两个顶点下标。
arc[i][j]=1; arc[j][i]=1; //在邻接矩阵中修改这两个顶点之间的边,从0改为1;表示存在边。
}
}
~Graph(); //静态存储,析构函数可不写。
//只写了构造,其余的功能没列举
private:
T vertex[maxsize]; //一维数组存储顶点信息;
int arc[maxsize][maxsize]; //二维数组存储邻接矩阵;
int vertexnum; //顶点的个数;
int edgenum; //边的个数;
};