/*第二关 完成图初始化-邻接表,并完成输出图的邻接表函数 */ GraphList *initGraphList( ) { /*第一行输入图的类型、图的顶点数和边数,第二行输入各条边的两顶点的编号,按顶点编号从小到大的顺序输入。 输出邻接表。不需考虑输入的数字非法情况,输入顶点的信息*/ } void printGraphLit( GraphList *G) { /*输出邻接表,输出格式:顶点->邻接顶点编号->...*/ }
时间: 2024-03-02 14:51:54 浏览: 97
以下是第二关的题目解答:
题目描述:
完成图的初始化-邻接表,并完成输出图的邻接表函数。
函数定义:
```c
GraphList *initGraphList();
void printGraphLit(GraphList *G);
```
输入:
第一行输入图的类型(0表示无向图,1表示有向图)、图的顶点数和边数。
第二行输入各条边的两顶点的编号,按顶点编号从小到大的顺序输入。
输出:
输出邻接表,输出格式:顶点->邻接顶点编号->...
注意:
不需考虑输入的数字非法情况,输入顶点的信息。
邻接表存储结构定义:
```c
#define MAX_VERTEX_NUM 100
typedef struct ArcNode {
int adjvex;
struct ArcNode *next;
} ArcNode;
typedef struct VNode {
char data;
ArcNode *firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
int kind;
} GraphList;
```
解题思路:
首先,根据输入的顶点数和边数,创建一个空的邻接表图,并依次读入每条边的两个顶点,将其加入到邻接表中。
对于无向图和有向图,建立边的方式是不同的。对于无向图,将边的两个顶点互相添加为邻接点;对于有向图,只将边的起点添加到终点的邻接表中。
最后,输出邻接表。
完整代码如下:
阅读全文