这是我参与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);
}
本算法主要是使用邻接表和邻接矩阵来实现的图的建立的,首先要获取图的顶点数和相应的边数,以及每条边的头和尾。之后要使用邻接矩阵建立有向图,邻接矩阵最主要的是邻接矩阵和顶点表,所以在转换的过程中,算法的重点是要将链接指针的首尾找到,然后填入邻接矩阵中,直到遍历完所有的边信息,全部填入邻接矩阵中即可。
实验结果截图: