本文章图片都是网络查找,如果有侵权请联系作者删除。
该文章只适合看一看或者回顾一下,或者是把代码拿走,不适合去学习和理解前辈写的东西
学习目录
一、前识
1. 无向图的存储: 邻接矩阵法 和 邻接多重表(没有代码)
2. 有向图的存储: 邻接表 和 逆邻接表(没有代码) 和 十字链表
二、邻接矩阵
针对无向图用邻接矩阵
邻接矩阵像矩阵一样,行和列看都存在一种关系.对于无向图用邻接矩阵法存储
- 优点是:明确谁和谁有联系,数值是多少,直观
- 缺点是:A-B a和b都存在关系而且权值是一样的,那么他要存两次,若是关系很稀疏的话则浪费了内存空间
用二维数组来代表矩阵就可以了,这有行也有列,代表鲜明
#include <stdio.h>
#include <stdlib.h>
#define MaxVertexNum 10
//邻接表
typedef int EdgeType;//边上的权值
typedef char VextextType;//顶点类型
typedef struct{
VextextType vexs[MaxVertexNum];
EdgeType edges[MaxVertexNum][MaxVertexNum];//邻接矩阵
int n,e;//边数和顶点数
}AdjGragh;
//建立无向图的邻接矩阵表示
void CreateMGraph(AdjGragh *G)
{
int i,j,k,w;
scanf("%d%d",&G->n,&G->e);//存多少个顶点和多少条边
for(i=0;i<G->n;i++){
G->vexs[i] = getchar();
}
for(i=0;i<G->n;i++){
for(j=0;j<G->n;j++){
G->edges[i][j] = 0;
}
}
for(k = 0; k<G->e;k++){