编写一个程序algo8-1,实现不带权图和带权图的邻接矩阵和邻接表的相互转换算法、输出邻接矩阵与邻接表的运算,并在此基础上设计一个主程序完成如下功能: (1) 建立如图所示的有向图G 的邻接矩阵,并输出之; (2) 由有向图G 的邻接矩阵产生邻接表,并输出之; (3) 再由(2)的邻接表产生对应的邻接矩阵,并输出之。 文件graph.h 定义了图的邻接矩阵表示类型和邻接表表示类型,该头文件在代码如下: typedef int InfoType; #define MAXV 100 //最大顶点个数 #define INF 32767 //INF 表示∞ //以下定义邻接矩阵类型 typedef struct { int no; //顶点编号 InfoType info; //顶点其它信息 } VertexType; //顶点类型 typedef struct //图的定义 { int edges[MAXV][MAXV]; //邻接矩阵 int n,e; //顶点数,边数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph; //图的邻接矩阵类型 //以下定义邻接表类型 typedef struct ANode //边的节点结构类型 { int adjvex; //该边的终点位置 struct ANode * nextarc; //指向下一条边的指针 InfoType info; //该边的相关信息,这里用于存放权值 } ArcNode; typedef int Vertex; typedef struct Vnode //邻接表头节点的类型 { Vertex data; //顶点信息 ArcNode * firstarc; //指向第一条边 } VNode; typedef VNode AdjList[MAXV]; //AdjList 是邻接表类型 typedef struct { AdjList adjlist; //邻接表 int n,e; //图中顶点数 n 和边数 e } ALGraph; //图的邻接表类型 Algo8-1.cpp 的代码如下: #include #include #include"graph.h" //---------------------------------------------------------------------- //------------------------不带权图的算法------------------------- //---------------------------------------------------------------------- void MatToList(MGraph g,ALGraph * &G) //将邻接矩阵 g 转换成邻接表G { int i,j; ArcNode * p; G=(ALGraph * )malloc(sizeof(ALGraph)); for(i=0;iadjlist[i].firstarc=NULL; for(i=0;i=0;j--) if(g.edges[i][j]!=0) //邻接矩阵的当前元素不为 0 { p=(ArcNode * )mall...