存储结构里面主要由四部分构成:
一个一维数组存储的是顶点信息,
是邻接矩阵由二维数组组成,存储着各顶点彼此之间的关系,
当前图的顶点数和线数。
下面是具体的代码实现
#include <iostream>
using namespace std;
int MAXVERTEX = 100; //图的最大顶点数
int INFINITY = 9999; //用有符号的int最大值表示无穷大
char vertextype; //定义定点的存储信息为字符型
int arctype; //定义边的权值为int型
//图的邻接矩阵的存储结构
typedef struct
{
vertextype vertex[MAXVERTEX]; //顶点表
arctype arc[MAXVERTEX][MAXVERTEX]; //邻接矩阵
int vertexnum; //图的当前顶点数
int arcnum; //图的当前边数
}MGraph;
//创建无向网
void CreateMGraph(MGraph &G)
{
cin >> G.vertexnum; //输入顶点数目
cin >> G.arcnum; //输入边数
for(int i = 0; i < G.vertexnum; i++) //输入顶点信息
cin >> G.vertex[i];
for(int i = 0; i < G.vertexnum; i++) //将所有边初始化为无穷大
for(int j = 0; j < G.vertexnum; j++)
G.arc[i][j] = INFINITY;
for(int k = 0; k < G.arcnum; k++)
{
int i, j, w;
cin >> i >> j; //输入构成边的两个顶点
cin >> w; //输入边所对应的权值
G.arc[i][j] = w;
G.arc[j][i] = G.arc[i][j]; //无向图的邻接矩阵为对称矩阵
}
}
//打印邻接矩阵
void PrintfMGraph(MGraph G)
{
for(int i = 0; i < G.vertexnum; i++)
{
for(int j = 0; j < G.vertexnum; j++)
cout << G.arc[i][j] << '\t';
cout << endl;
}
}
//主函数
int main()
{
MGraph G;
CreateMGraph(G);
PrintfMGraph(G);
return 0;
}
邻接表有两种结点结构:顶点表结点和边表结点。
一.
vertex:数据域,存放顶点信息。
firstedge:指针域,指向边表中第一个结点。
二.
adjvex:邻接点域,边的终点在顶点表中的下标。
next:指针域,指向边表中的下一个结点。
经转换为如下结构:
// 边表结点定义
struct ArcNode{
int adjvex;
ArcNode *next;
};
//定点表结点定义
template <class T>
struct VertexNode{
T vertex;
ArcNode *firstedge;
};