DS博客作业04--图

0.PTA总分

1.本周学习总结

1.1 总结图内容

图存储结构

  • 邻接矩阵
    简单来讲使用二维数组进行存储,设位edge[M][N]。其中,M,N代表两个顶点,edge[M][N]可代表是否连通或者权值。

邻接矩阵的特点:

  1. 若图为无向图,则矩阵是沿对角线是对称的。
  2. 可以直接访问顶点M,N间边的关系以及权值。

缺点:

  • 存储的图为稀疏图时,浪费的空间较多,n个顶点所需空间至少为n^2。

结构体定义

typedef struct  		//图的定义
{  int edges[MAXV][MAXV]; 	//邻接矩阵
   int n,e;  			//顶点数,边数
} MGraph;

  • 邻接表
    采用结构体数组跟链表结合,存储每个顶点的临边

特点:

  • 存储的图为无向图时,遍历顶点数组每个临边即可遍历整张图
  • 相比于邻接矩阵更节省空间

缺点

  • 无法直接知道任一两个顶点之间的关系。
  • 存储的图为有向图时,同一条边会生成两条链。

结构体定义

typedef struct ANode
{  
    int adjvex;			//该边的终点编号
    struct ANode *nextarc;	//指向下一条边的指针
    int info;	                //该边的相关信息,如权重
} ArcNode;			//边表节点类型
typedef int Vertex;
typedef struct Vnode
{  
    Vertex data;		//顶点信息
    ArcNode *firstarc;		//指向第一条边
} VNode;			//邻接表头节点类型
typedef VNode AdjList[MAXV];    //头结点数组
typedef struct 
{  
    AdjList adjlist;	        //邻接表
    int n,e;		        //图中顶点数n和边数e
} AdjGraph;	

图遍历及应用

猜你喜欢

转载自www.cnblogs.com/gdlkblue/p/12804143.html