//图的数组(邻接矩阵)存储表示
#include <stdio.h>
#include <stdlib.h>
#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;
}

如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

数据结构之---C语言实现图的数组(邻接矩阵)存储表示的更多相关文章

  1. 数据结构之---C语言实现图的邻接表存储表示

    // 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...

  2. 数据结构之---C++语言实现图的十字链表存储表示

    近期一直忙着考研复习,非常久都没有更新博客了.今天写一篇数据结构的存储. //有向图的十字链表存储表示 //杨鑫 #include <iostream> #include <cstd ...

  3. 数据结构(C语言版)---线性表链式存储表示

    1.单链表:线性表的链式存储. 1)特点:用一组任意的存储单元存储数据元素(存储单元可以连续,也可以不连续),逻辑上相邻的元素存储位置不一定相邻. 2)结点包括两个域:数据域(存储数据元素信息).指针 ...

  4. 数据结构之---C语言实现广义表头尾链表存储表示

    //广义表的头尾链表存储表示 //杨鑫 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #in ...

  5. 数据结构(C语言第2版)-----数组,广义表,树,图

    任何一个算法的设计取决于选定的数据结构,而算法的实现依赖于采用的存储结构. 之前线性表的数据元素都是非结构的原子类型,元素的值是不可再分的.下面学习的这两个线性表是很特殊的,其中数据元素本身也可能是一 ...

  6. 数据结构算法C语言实现(二十七)--- 7.2图的遍历

    一.简述 栈与队列,DFS与BFS.仅以连接表为例实现. 二.头文件 BFS要用到的头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@g ...

  7. 图的存储结构大赏------数据结构C语言(图)

    图的存储结构大赏------数据结构C语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...

  8. 数据结构(C语言版)-第6章 图

    6.1 图的定义和基本术语 图:Graph=(V,E)  V:顶点(数据元素)的有穷非空集合:  E:边的有穷集合. 无向图:每条边都是无方向的 有向图:每条边都是有方向的 完全图:任意两个点都有一条 ...

  9. 数据结构之---C语言实现拓扑排序AOV图

    //有向图的拓扑排序 //杨鑫 #include <stdio.h> #include <stdlib.h> #include <string.h> #define ...

随机推荐

  1. hdu 3714 Error Curves(三分)

    Error Curves Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  2. Chrome DevTools & performance optimization

    Chrome DevTools & performance ptimization https://www.bing.com https://developers.google.com/web ...

  3. Emma中文乱码解决方法

    vim -/.emma/emmarc db_encoding=latin1 改为 db_encoding=utf8 sudo vim /usr/share/emma/emmalib/mysql_hos ...

  4. Shader剔除像素绘制扇形

    Shader "Custom/Indicator" { Properties { _MainTex("Main Texture", 2D) = "wh ...

  5. C++ Essentials 之 lower_bound 和 upper_bound 的比较函数格式不同

    第一次注意到这个问题. cppreference 上的条目: lower_bound upper_bound C++17 草案 N4659 lower_bound template<class ...

  6. ffmpeg nmb

    搞了一个下午的raw bitstream封装无果然后转战mp4box一秒搞定了 优秀啊..

  7. regression

    单变量线性回归univariate linear regression 代价函数square error cost function : \(J(\theta)=\frac{1}{2m}\sum_{i ...

  8. 【Visual Studio】简单内存泄漏检测方法 解决 Detected memory leaks! 问题(转)

    原文转自 http://blog.csdn.net/u011430225/article/details/47840647 我的环境是: XP SP2.VS2003 最近在一个项目中, 程序退出后都出 ...

  9. Python学习杂记_2_格式化字符串的一些操作

    name=input("Please input your name: ") sex=input("Please input your sex: ") prin ...

  10. 转:C#制作ORM映射学习笔记二 配置类及Sql语句生成类

    在正式开始实现ORM之前还有一点准备工作需要完成,第一是实现一个配置类,这个很简单的就是通过静态变量来保存数据库的一些连接信息,等同于.net项目中的web.config的功能:第二需要设计实现一个s ...