//图的数组(邻接矩阵)存储表示

#include

#include

#define MAX_VEX_NUM 50

typedef char VertexType;

typedef enum {

DG, UDG

} GraphType;

typedef struct {

VertexType vexs[MAX_VEX_NUM];

int arcs[MAX_VEX_NUM][MAX_VEX_NUM];

int vexnum, arcnum;

GraphType type;

} MGraph;

//定位

int getIndexOfVexs(char vex, MGraph *MG)

{

int i;

for (i = 1; i <= MG->vexnum; i++)

{

if (MG->vexs[i] == vex)

{

return i;

}

}

return 0;

}

//创建图

void create_MG(MGraph *MG)

{

int i, j, k;

int v1, v2, type;

char c1, c2;

printf("Please input graph type DG(0) or UDG(1) :");

scanf("%d", &type);

if (type == 0)

MG->type = DG;

else if (type == 1)

MG->type = UDG;

else

{

printf("Please input correct graph type DG(0) or UDG(1)!");

return;

}

printf("Please input vexmun : ");

scanf("%d", &MG->vexnum);

printf("Please input arcnum : ");

scanf("%d", &MG->arcnum);

getchar();

for (i = 1; i <= MG->vexnum; i++)

{

printf("Please input %dth vex(char):", i);

scanf("%c", &MG->vexs[i]);

getchar();

}

//初始化邻接矩阵

for (i = 1; i <= MG->vexnum; i++)

{

for (j = 1; j <= MG->vexnum; j++)

{

MG->arcs[i][j] = 0;

}

}

//输入边的信息,建立邻接矩阵

for (k = 1; k <= MG->arcnum; k++) {

printf("Please input %dth arc v1(char) v2(char) : ", k);

scanf("%c %c", &c1, &c2);

v1 = getIndexOfVexs(c1, MG);

v2 = getIndexOfVexs(c2, MG);

if (MG->type == 1)

MG->arcs[v1][v2] = MG->arcs[v2][v1] = 1;

else

MG->arcs[v1][v2] = 1;

getchar();

}

}

/**

* 打印邻接矩阵和顶点信息

*/

void print_MG(MGraph MG)

{

int i, j;

if(MG.type == DG)

{

printf("Graph type : Direct graph:\n");

}

else

{

printf("Graph type: Undirect graph:\n");

}

printf("Graph vertex number: %d \n",MG.vexnum);

printf("Graph arc number: %d \n",MG.arcnum);

printf("Vertex set:");

for (i = 1; i <= MG.vexnum; i++)

printf("%c ", MG.vexs[i]);

printf("\n");

printf("Adjacency Matrix:\n");

for (i = 1; i <= MG.vexnum; i++)

{

j = 1;

for (; j < MG.vexnum; j++)

{

printf("%d ", MG.arcs[i][j]);

}

printf("%d ", MG.arcs[i][j]);

printf("\n");

}

}

int main()

{

MGraph MG;

create_MG(&MG);

print_MG(MG);

return 0;

}

如图:

c语言数据结构用矩阵存储图,数据结构之---C语言实现图的数组(邻接矩阵)存储表示...相关推荐

  1. 图的数组(邻接矩阵)存储结构

    图是比较复杂的数据结构,它由顶点和顶点之间的弧或边组成.任何两个顶点之间都 可能存在弧或边.在计算机存储图时,只要能表示出顶点的个数及每个顶点的特征.每对 顶点之间是否存在弧(边)及弧(边)的特征,就 ...

  2. 图的邻接矩阵存储及遍历操作

    第1关:图的邻接矩阵存储及求邻接点操作 任务描述 本关任务:要求从文件输入顶点和边数据,包括顶点信息.边.权值等,编写程序实现以下功能. 1)构造无向网G的邻接矩阵和顶点集,即图的存储结构为邻接矩阵. ...

  3. c++ 数据结构 图的应用(实现图的深度优先和广度优先遍历)——以邻接表为存储结构

    数据结构实习--图及应用(图的遍历) 一.问题描述 很多涉及图上操作的算法都是以图的遍历操作为基础的.试写一个程序,演示无向图的遍历操作. 二.基本要求 以邻接表为存储结构,实现连通无向图的深度优先和 ...

  4. 数据结构-图-邻接矩阵-试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc-icoding

    邻接矩阵 试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc,相关定义如下: typedef int VertexType;type ...

  5. 数据结构--三角矩阵的压缩存储

    三角矩阵 三角矩阵的常用压缩方式有两种: 线性压缩 使用三角形的二维数组压缩 线性压缩存储三角矩阵 下三角矩阵: 上三角矩阵: 以下三角矩阵的线性压缩存储为例,进行实现: package pers.z ...

  6. 图的存储结构与操作--C语言实现

    图(graph)是一种比树结构还要复杂的数据结构,它的术语,存储方式,遍历方式,用途都比较广,所以如果想要一次性完成所有的代码,那代码会非常长.所以,我将分两次来完成图的代码.这一次,我会完成图的五种 ...

  7. c语言枚举变量自增报错,C_数据结构与算法(1):C语言基础

    C_数据结构与算法(一):C语言基础 致初学者的我:一切都是由浅入深. 每种语言都有每种语言的特性,基本的特性是相同的,下面依照惯例写hello world,相关编译后面再介绍. // C语言用&qu ...

  8. 数据结构题及c语言版答案周桂红版,数据结构习题与答案.pdf

    第 1 章 绪 论 课后习题讲解 1. 填空 ⑴( )是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理. [解答]数据元素 ⑵( )是数据的最小单位,( )是讨论数据结构时涉及的最小数据 ...

  9. 【数据结构_浙江大学MOOC】第六七八讲 图

    列出连通集 题目 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点. 输 ...

最新文章

  1. 原子智库 | 刘伟:人工智能快追上人类思维?答案可能让你失望
  2. python监控错误语句,基于Python的关键字监控及告警
  3. 自主云服务器处理器_云服务器哪家的CPU最便宜且好用
  4. Spark SQL之RDD转DataFrame
  5. layui导入模板数据_layui表格-template模板的三种用法
  6. AI看脸、测肤,左可美妆新零售,右能智慧医美
  7. Android 图形架构
  8. JUC原子类-数组类型(三)
  9. 大数据时代,怎么做全渠道的营销
  10. 华为成了!鸿蒙OS 2.0对比iOS 14:苹果流畅度竟完败?
  11. 用YAML构建数据测试DAO层
  12. 20. Valid Parentheses[E]有效的括号
  13. cocos 创建一个js项目_如何使用Cocos2d-JS引擎快速开发一个微信游戏?
  14. JavaScript 大小转化B KB MB GB等的转化
  15. 无盘服务器什么意思,无盘网络是什么
  16. 尤雨溪对 2022 Web前端生态趋势是这样看的
  17. Ubuntu20.04安装gamit10.7
  18. 英语一2011 阅读四
  19. Android 去除各种厂家广告合集
  20. 苹果支付验单java

热门文章

  1. Oracle 10G2 for CentOS 5.2 安装截图详解
  2. 问题十一:用条件编译(#if…#endif)避免 main函数中测试代码在测试完成后就删除
  3. 将一个字符串进行反转。将字符串中指定部分进行反转
  4. 大数据技术在各行业中的挑战有哪些
  5. java web调用exe文件_从网页WEB上调用本地应用程序(java)
  6. enum ordinal java_Java中怎样由枚举常量的ordinal值获得枚举常量对象
  7. cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...
  8. bit是python最快的bitcoin库_新的Bitcoinpython节点比以前的Python库快100倍
  9. ea 如何画bce备选架构图_GitHub - wongdean/rime-settings at 941ea079832ff211723bce1ce8e47344e527575e...
  10. Python爬虫之(九)数据提取-XPath