图的存储结构有 3 种形式:邻接矩阵、邻接表 和 邻接多重表
对于一个有 n 个顶点的图,其顶点信息可以用一个一维数组表示,而顶点间是否有相邻的关系,可以用邻接矩阵(Adjacency Matrix)来表示。若 G 是一个有 n 个顶点的图,则 G 的邻接矩阵 A 是具有如下性质的 n 阶方阵:
带权的图成为网,下面给出一个程序来构建一个网的邻接矩阵:
#include
#include
#include
using namespace std;
#define INFINITY INT_MAX
#define MAX_VERTEX_NUM 20
typedef struct{
int vex[MAX_VERTEX_NUM];
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum,arcnum;
}mgraph;
void creatmg(mgraph *g)
{
int m,n,w;
cin>>g->vexnum>>g->arcnum; // 输入顶点的个数和边数
for(int i=0;ivexnum;i++)
for(int j=0;jvexnum;j++)
g->arcs[i][j] = INFINITY; // 初始化邻接矩阵各元素为无穷大
for(int i=0;ivexnum;i++)
cin>>g->vex[i]; // 输入顶点
for(int j=0;jarcnum;j++)
{
cin>>m>>n>>w; // 输入 arcnum 条边所对应的顶点 m, n,以及这两个顶点之间的权重 w
g->arcs[m][n] = g->arcs[n][m] = w; // 无向图的邻接矩阵的对称的
}
}
int main()
{
mgraph g;
creatmg(&g);
cout<
system("pause");
return 0;
}