数据结构(图)_邻接矩阵

前言

数据结构是非常重要的一门学课 , 研究的问题是事物如何存储在计算机中 ! 以前学习过 , 但是那个时候因为基础太差的问题和没有耐心的问题和没有把它当成重要的东西所以基本没有学到什么 ,但当我意识到它的重要性时 , 认真花了时间来对它进行学习.

  • 学习到图这个结构了 , 刚学习完邻接矩阵存储它 , 所以用代码来实现了一下它.实现完感觉还是要进行记录一下.

知识点总结

  • 为什么要使用邻接矩阵来存储图呢?
  • 使用邻接矩阵存储图结构的好处是什么?
  • 邻接矩阵存储图结构如何进行存储?
    • 有向图
    • 无向图
  • 什么是对称矩阵?

成功截图

动态创建邻接矩阵

代码

分析过程

  • 获取顶点数和边数
  • 获取所有的顶点数 (存储到一维数组中
  • 初始化所有顶点与顶点之间的关系 (给二维数组所有元素初始化一个值)
  • 开始获取并存储边关系
    • 获用户输入边的关系 (主要是两个顶点)
    • 如果有权值的话那么将权值放到两个顶点构成的二维数组中的位置 ,如果没有权值的话写成1表示两个顶点可以构成边即可.
#include <stdio.h>
#define MAXV 100            // 最大顶点数
#define INFINITY 65535      // 用65535来代表无穷大 (初始化时用到
#pragma warning(disable:4996)

typedef struct Graph
{
    char vexs[MAXV];                        // 顶点表
    int tables[MAXV][MAXV];                 // 邻接矩阵
    int numV, numE;                         // 图中当前的顶点数和边数
} GRAPH , *PGRAPH ;

int main()
{
    Graph graph;
    PGRAPH pGraph = &graph;

    //获取顶点数与边数
    printf("请输入顶点数与边数:");
    scanf("%d %d", &pGraph->numV, &pGraph->numE);

    //获取所有顶点数
    printf("请输入所有的顶点数:");
    for (int i = 0; i < pGraph->numV; i++)
    {
        scanf("%d", &pGraph->vexs[i]);
    }

    //初始化所有的顶点与顶点之间的关系 
    for (int j = 0; j < pGraph->numV; j++)
    {
        for (int k = 0; k < pGraph->numV; k++) 
        {
            pGraph->tables[j][k] = INFINITY;
        }
    }

    //获取顶点与顶点之前的关系(边) - 带权值
    for (int k = 0; k < pGraph->numE; k++)
    {
        int t, g;
        printf("请输入边的两个顶点:");
        scanf("%d %d", &t, &g);             //获取边


        printf("请输入权值:");
        scanf("%d", &pGraph->tables[t][g]);

        pGraph->tables[t][g]= pGraph->tables[g][t];     //因为邻接矩阵是对称表 . 所以设置一下.

    }



    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章