~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌
✌ 题目及题解持续更新中
【2023王道数据结构目录】课后算法设计题C、C++代码实现完整版大全
题目: 通过C++实现利用邻接矩阵法存储创建图结构
代码实现:
#include <iostream>
using namespace std;
#define MAX_VERTEX_NUM 100
/* 定义邻接矩阵 */
typedef struct
{
char vertex[MAX_VERTEX_NUM];
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vertex_num, edge_num; // 顶点数量、边的数量
} Graph;
void InitGraph(Graph &g, char vertex[], int edge[][5], int n)
{
/***********************************
* description: 初始化图的邻接矩阵
* input:
* @g: 图的引用
* @vertex: 图的顶点信息
* @edge: 图的邻接矩阵
* return:
***********************************/
g.vertex_num = n;
g.edge_num = 0;
// 初始化图的顶点信息
for (int i = 0; i < n; i++)
{
g.vertex[i] = vertex[i];
}
// 初始化图的邻接矩阵
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
g.edge[i][j] = edge[i][j];
// 如果存在路径,将边的条数加1
if (edge[i][j] != 0)
{
g.edge_num++;
}
}
}
// 由于是无向图,最后的边数需要除以2
g.edge_num /= 2;
}
void PrintGraph(Graph g)
{
/***********************************
* description: 打印图的邻接矩阵
* input:
* @g: 输入的图结构
* return:
***********************************/
for (int i = 0; i < g.vertex_num; i++)
{
for (int j = 0; j < g.vertex_num; j++)
{
cout << g.edge[i][j] << '\t';
}
cout << endl;
}
}
void InitGraph(Graph &g)
{
/***********************************
* description: 初始化图结构,本函数中修改图的数据
* input:
* @g: 图的结构
* return:
***********************************/
char vertex[] = {
'1', '2', '3', '4', '5'}; //图的顶点名称
//图的邻接矩阵
int edge[5][5] = {
{
0, 1, 0, 1, 0},
{
1, 0, 1, 0, 1},
{
0, 1, 0, 1, 1},
{
1, 0, 1, 0, 0},
{
0, 1, 1, 0, 0}};
InitGraph(g, vertex, edge, 5);
}
int main()
{
Graph g;
InitGraph(g);
PrintGraph(g);
cout << g.edge_num;
}