邻接矩阵表示图

image.png

  1. typedef struct GNode *PrtToGNode;
  2. struct GNode {
  3. int Nv; // 顶点数
  4. int Ne; // 边数
  5. WeightType G[MaxVertexNum][MaxVertexNum];
  6. DataType Data[MaxVertexNum]; // 存顶点的数据
  7. }
  8. typedef PrtToGNode MGraph;

初始化

初始化一个由 VertexNum 个顶点但没有边的图

  1. typedef int Vertex; // 用顶点下标表示顶点
  2. MGraph CreateGraph( int VertexNum )
  3. {
  4. Vertex V,M; // 顶点类型
  5. MGraph Graph;
  6. Graph = (Mgraph)malloc(sizeof(struct Gnode)); // 矩阵空间
  7. Graph->Nv = VertexNum; // 图的顶点个数
  8. Graph->Ne = ; // 无边图
  9. for (V = 0; V < Graph->Nv; V++) { // 注意:这里默认顶点编号从0开始,到(Graph->Nv - 1)
  10. for (W = 0; W < Graph->Nv; W++) {
  11. Graph->G[V][W] = 0; // 或 INFINITY
  12. }
  13. }
  14. return Graph;
  15. }

向 MGraph 中插入边

  1. typedef struct ENode *ProToENode;
  2. struct ENode {
  3. Vertex V1, V2; // 有向边 <V1, V2>
  4. WeightType Weight; // 权重
  5. };
  6. typedef ProToENode Edge;
  7. void InsertEdge( MGraph Graph, Edge E ){ // 将相应的权重赋给邻接矩阵
  8. Graph->G[E->V1][E->V2] = E->Weight; // 插入边 <V1, V2>
  9. Graph->G[E->V2][E->V1] = E->Weight; // 若是无向图,还要插入边 <V2, V1>
  10. }

完整建立一个 MGraph

image.png

邻接表表示图

image.png
image.png
image.png