#define MaxVertexNum 100 //顶点数目的最大值
typedef struct{
char Vex[MaxVertexNum]; //顶点表
int Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表
int vexnum,arcnum;//图的当前顶点数和边数/弧数
}MGraph;
顶点中可以存更加复杂的信息
可以用bool型或枚举型变量表示边。
int——4B or 8B
bool——1B
#define MaxVertexNum 100 //顶点数目的最大值
#define INFINITY //宏定义常量“无穷”
typedef char VertexType; //顶点的数据类型
typedef int EdgeType;
typedef struct{
VertexType Vex[MaxVertexNum];
EdgeType Edge[MaxVertexNum][MaxVertexNum];
int vexnum,arcnum;
}
如何定义“无穷”
空间复杂度:
只和顶点数相关,和实际的边数无关
只适用于存储稠密图
无向图的邻接矩阵是对称矩阵,可以压缩存储
从1(A)-4(D)长度为2的路径有几条。
数据实现的顺序存储,空间复杂度高,不适合存储稀疏图。
无向图:
//“顶点”
typedef struct VNode{
VertexType data; //顶点信息
ArcNode *first; //第一条边/弧
}VNode,AdjList[MaxVertexNum];
//用邻接表存储的图
typedef struct{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
//“边/弧”
typedef struct ArcNode{
int adjvex; //边/弧指向哪个节点
struct ArcNode *next; //指向下一条弧的指针
//InfoType info; //边权值
}ArcNode;
表示方法不唯一
有向图:
空间复杂度:O(|V|+|E|)
出边:顺着绿色线找
入边:顺着橙色线找
十字链表发只能存储用向图
删除结点
原文:https://www.cnblogs.com/jev-0987/p/13210240.html