【2023王道数据结构】【图】通过C++实现利用邻接矩阵法存储创建图结构C、C++完整实现(可直接运行)

~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌


题目及题解持续更新中
【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;
}

猜你喜欢

转载自blog.csdn.net/m0_47256162/article/details/124773394