算法设计与分析学习笔记06 | 8月更文挑战

202 阅读2分钟

这是我参与8月更文挑战的第6天,活动详情查看: 8月更文挑战

算法设计与分析题目1

有向图G的邻接表表示转换为G的邻接矩阵表示

实验目的:

掌握使用图来设计和实现算法

掌握使用邻接表来建立和输出有向图

掌握使用邻接矩阵来建立和输出有向图

掌握使用邻接表表示的图来生成邻接矩阵表示的图

内容:

1. 输入有向图的顶点数和边数,及各条边的头和尾

2. 设计函数使用邻接表表示建立和输出有向图

3. 设计函数使用邻接矩阵表示建立和输出有向图

4. 设计函数使用邻接表生成有向图的邻接矩阵表示

5. 调用函数,输出邻接矩阵表示的有向图

根据图的邻接表表示转换为邻接矩阵表示的算法如下,核心代码及注释:

//将图的邻接表表示转换为邻接矩阵表示

void AdjGraphToMtGraph(AdjGraph G)

{

//邻接矩阵表示的有向图G

MTGraph gm;

gm.n = G.n;

gm.e = G.e;

//设图有 n 个顶点,邻接矩阵初始化

for (int i = 0; i < gm.n; i++)

for (int j = 0; j < gm.n; j++) gm.edge[i][j] = 0;

//取第一个邻接点,填邻接矩阵元素值,并求下一个邻接点

for (int i = 0; i < gm.n; i++)

{

EdgeNode *p = G.VexList[i].adj;

//下一邻接点不为空,继续取

while (p != NULL)

{

gm.edge[i][p->dest] = 1;

p = p->link;

}

}

cout << "使用邻接矩阵表示有向图G" << endl;

ShowMTGraph(gm);

}

本算法主要是使用邻接表和邻接矩阵来实现的图的建立的,首先要获取图的顶点数和相应的边数,以及每条边的头和尾。之后要使用邻接矩阵建立有向图,邻接矩阵最主要的是邻接矩阵和顶点表,所以在转换的过程中,算法的重点是要将链接指针的首尾找到,然后填入邻接矩阵中,直到遍历完所有的边信息,全部填入邻接矩阵中即可。

实验结果截图:

图片1.png