美文网首页
图(邻接矩阵)

图(邻接矩阵)

作者: lkmc2 | 来源:发表于2018-08-15 19:48 被阅读191次

图的邻接矩阵:该存储方式使用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边的信息。

无向图 邻接矩阵结构图

实现代码如下:

// 图(邻接矩阵)
#include <stdio.h>

#define MAXVEX 100 // 最大顶点数
#define INFINITY 65535 // 无穷

typedef char VertexType; // 顶点元素类型
typedef int EdgeType; // 边上权值的类型

// 邻接矩阵结构(无向图)
typedef struct {
    VertexType vexs[MAXVEX]; // 顶点表
    EdgeType arc[MAXVEX][MAXVEX]; // 边表
    int numNodes, numEdges; // 图的顶点数、边数
} MGraph;

/**
 * 创建无向图的临接矩阵表示
 * @param G 邻接矩阵(无向图)
 */
void CreateMGraph(MGraph *G) {
    int i, j, k, w;

    printf("请输入顶点数和边数:\n");
    scanf("%d,%d", &G->numNodes, &G->numEdges); // 读取顶点数和边数
    getchar(); // 用于抵消回车键

    printf("请输入%d个顶点的值:\n", G->numNodes);
    // 依次输入顶点表信息
    for (i = 0; i < G->numNodes; i++) {
        scanf("%c", &G->vexs[i]); // 读取用户输入的值到顶点表中
        getchar();  // 用于抵消回车键
    }

    printf("请输入%d条边的值:\n", G->numEdges);
    // 初始化边表
    for (i = 0; i < G->numNodes; i++) {
        for (j = 0; j < G->numNodes; j++) {
            G->arc[i][j] = INFINITY; // 设置边表中所有的值为无穷
        }
    }

    // 依次输入边表信息
    for (k = 0; k < G->numEdges; k++) {
        printf("输入边(vi,vj)的下标i,下标j和权值w:\n");
        scanf("%d,%d,%d", &i, &j, &w); // 输入边(vi,vj)上的权
        getchar(); // 用于抵消回车键

        G->arc[i][j] = w; // 设置边(vi,vj)上的权值
        G->arc[j][i] = G->arc[i][j]; // 因为是无向图,矩阵对称,边(vj,vi)等于边(vi,vj)
    }
}

/**
 * 打印无向图
 * @param G 邻接矩阵(无向图)
 */
void Print(MGraph *G) {
    int i, j; // 用来遍历元素

    printf("顶点表的值为:\n");
    // 打印顶点表
    for (i = 0; i < G->numNodes; i++) {
        printf("v%d: %c\n", i, G->vexs[i]);
    }
    printf("\n");

    printf("边表的值为:\n");
    // 打印边表
    for (i = 0; i < G->numNodes; i++) {
        for (j = 0; j < G->numNodes; j++) {
            if (G->arc[i][j] != INFINITY) { // 元素不为无穷,表示该边有值
                printf("<v%d, v%d>: %d\n", i, j, G->arc[i][j]);
            }
        }
    }
}

int main() {
    MGraph G; // 邻接矩阵
    CreateMGraph(&G); // 创建邻接矩阵(无向图)
    Print(&G); // 打印邻接矩阵(无向图)

    return 0;
}
运行结果

相关文章

  • 数据结构之图的存储结构邻接矩阵法

    一、邻接矩阵法定义 二、邻接矩阵法表示图 2.1 邻接矩阵法表示图的定义 2.2 邻接矩阵法表示图的示例 2.2....

  • 图的五种存储结构

    1.邻接矩阵 图的邻接矩阵(Adjacency Matrix):图的邻接矩阵用两个数组来表示图。一个一维数组存储图...

  • 数据结构课程 第十周 图

    定义和基本术语 案例引入 图的类型定义 图的存储结构 1数组(邻接矩阵)表示法 邻接矩阵的建立 邻接矩阵的优缺点 ...

  • 数据结构——图

    1、图的概念 2、图的抽象数据类型 3、图的存储结构 图的邻接矩阵表示 邻接矩阵的代码表示

  • 图的表示和存储结构

    图的表示:两种表示方法 邻接矩阵和邻接表 无向图 有向图 图的权 连通图 度 图的存储结构 1、邻接矩阵存储 浪...

  • 第三十节-图的表示

    邻接矩阵存储方法 图最直观的一种存储方法就是,邻接矩阵 (Adjacency Matrix)。邻接矩阵的底层依赖一...

  • [图]图和图遍历(BFS和DFS)(一)

    1. 图的存储结构 常见的图存储结构主要分为邻接矩阵和邻接表两种。 1.1 图的邻接矩阵表示: 图结构: 图的创建...

  • 第十九讲 数据结构之图(二)

    图的存储结构 邻接矩阵 图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组...

  • 图的遍历

    1.采用深度优先搜索(DFS)遍历图 邻接矩阵: 邻接表: 2.采用广度优先搜索(BFS)遍历图 邻接矩阵: 邻接...

  • 图论——深度优先遍历和广度优先遍历(Java)

    图数据结构的定义 无向图 无向图的特点 邻接矩阵是对称的 有向图 图的存储 邻接矩阵存储方式 如下图所示,二维矩阵...

网友评论

      本文标题:图(邻接矩阵)

      本文链接:https://www.haomeiwen.com/subject/meuwbftx.html