Graph.h   (图的结构, 遍历, 常规操作接口)

 /*定义图的最大定点数, 它要大于等于具体图的顶点树n*/
#define MaxVertexNum 12 /*定义图的最大边数,它要大于等于具体图的边数e*/
#define MaxEdgeNum 20 /* 定义MaxValue 为一个符号常量,其值要大于邻接矩阵中所有有效值之和*/
#define MaxValue 1000 /*定义MS为一个符号常量,用于广度优先搜索遍历的算法中,作为自定义顺序队列的数组长度*/
#define MS 20 /*定义图中顶点数据的类型VertexType为整型*/
typedef int VertextType; /*定义vexlist为存储顶点信息的数组类型*/
typedef VertexType vexlist[MaxVertexNum]; /*定义adjmatrix 为存储邻接矩阵的数组类型*/
typedef int adjmatrix[MaxVertexNum][MaxVertexNum]; /*定义保存图顶点访问标记的数组*/
int visited[MaxVertexNum]; /*通过从键盘上输入的n个顶点信息和e条无向带权边的信息建立顶点数组GV和邻接矩阵GA*/
void Create1(vexlist GV, adjmatrix GA, int n, int e); /*从初始点Vi出发深度优先搜索由邻接矩阵GA表示的图*/
void dfs1(adjmatrix GA, int i, int n); /*从初始点Vi出发广度优先搜索由邻接矩阵GA表示的图*/
void bfs1(adjmatrix GA, int i, int n);

Graph.c   (图的接口实现)

 void Create1(vexlist GV, adjmatrix GA, int n, int e){
/*通过从键盘上输入的n个顶点信息和e条无向带权边的信息建立顶点数组GV和邻接矩阵GA*/
int i,j,k,w;
/*建立顶点数组*/
printf("输入%d个顶点数据\n", n);
for(i = ; i<n; i++) scanf("%d", &GV[i]);
/*初始化邻接矩阵数组*/
for(i = ; i<n; i++)
for(j = ; j<n; j++){
if(i == j)GA[i][j] = ;
else GA[i][j] = MaxValue;
}
/*建立邻接矩阵数组*/
printf("输入%d条无向带权边\n", e);
for(k = ; k<=e; k++){
/*输入一条边的两端点序号i和j及边上的权w*/
scanf("%d %d %d", &i, &j, &w);
/*置数组中相应对称元素的值为w*/
GA[i][j] = GA[j][i] = w;
} } void dfs1(adjmatrix GA, int i, int n){
/*从初始点Vi出发深度优先搜索由邻接矩阵GA表示的图*/
int j;
/*假定访问顶点Vi以输出该顶点的序号代之*/
printf("%d",i);
/*标记Vi已被访问过*/
visited[i] = ;
/*依次搜索Vi的每个邻接点*/
for(j = ; j<n; j++)
/*若Vi的一个有效邻接点Vj未被访问过,则从Vj出发进行递归调用*/
if(GA[i][j]!= && GA[i][j]!=MaxValue && !visited[j])
dfs1(GA, j, n);
} void bfs1(adjmatrix GA, int i, int n){
/*从初始点Vi出发广度优先搜索由邻接矩阵GA表示的图*/
/*定义一个顺序队列Q,其元素类型应为整形,初始化队列为空*/
int Q[MS]; //MS是一个事先定义的符号常量
int front = ,rear = ;
/*访问初始点Vi,同时标记初始点Vi已访问过*/
printf("%d" ,i);
visited[i] = ;
/*将已访问过的初始点序号i入队*/
rear = (rear+)%MS;
if(front == rear) {
printf("队列空间用完!\n");
exit();
}
Q[[rear] = i; /*当队列非空时进行循环处理*/
while(front != rear){
int j,k;
/*删除队首元素,第一次执行时k的值为i*/
front = (front + )%MS;
k = Q[front];
/*依次搜索Vk的每一个可能的邻接点*/
for(j = ; j<n; j++){
if(GA[k][j]!= && GA[k][j] != MaxValue&&!visited[j]){
printf("%d", j); //访问一个未被访问过的邻接节点Vj
visited[j] = ; //标记Vj已被访问过
rear = (rear+)%MS; //修改队尾指针
if(front == rear) {
printf("队列空间用完!\n");
exit();
}
Q[rear] = j;
}
} }
}

图 ADT接口 遍历运算 常规运算 邻接矩阵实现的更多相关文章

  1. 二叉树 ADT接口 遍历算法 常规运算

    BTree.h   (结构定义, 基本操作, 遍历) #define MS 10 typedef struct BTreeNode{ char data; struct BTreeNode * lef ...

  2. PTA 邻接矩阵存储图的深度优先遍历

    6-1 邻接矩阵存储图的深度优先遍历(20 分) 试实现邻接矩阵存储图的深度优先遍历. 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)( ...

  3. C语言实现邻接矩阵创建无向图&图的深度优先遍历

    /* '邻接矩阵' 实现无向图的创建.深度优先遍历*/ #include <stdio.h> #include <stdlib.h> #define MaxVex 100 // ...

  4. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  5. 一张图彻底搞懂JavaScript的==运算

    一张图彻底搞懂JavaScript的==运算 来源 https://zhuanlan.zhihu.com/p/21650547 PS:最后,把图改了一下,仅供娱乐 : ) 大家知道,==是JavaSc ...

  6. java数据结构_附11_图的接口定义

    图的接口定义 Graph public class UnsupportedOperation extends RuntimeException {public UnsupportedOperation ...

  7. 图的深度优先遍历DFS

    图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件 ...

  8. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  9. 图的深度优先遍历(DFS)和广度优先遍历(BFS)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

随机推荐

  1. Mysql进阶-day1

     Mysql数据库启动-关闭-登录-查看帮助 #单实例启动 1./etc/init.d/mysqld start 2.service mysqld start/restart 3./usr/local ...

  2. MapReduce Design Patterns(chapter 2 (part 3))(四)

    Inverted Index Summarizations Pattern Description 反向索引模式在MapReduce分析中经常作为一个例子.我们将会讨论我们要创建的term跟标识符之间 ...

  3. August 01st 2017 Week 31st Tuesday

    A contented mind is the greatest blessing a man can enjoy in this world. 知足是人生在世最大的幸事. Being content ...

  4. Python2.7 - IMOOC - 2

    第三章 Python变量和数据类型 3-1.数据类型 在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,表示方法和数学上的写法一模一样,十 ...

  5. Windows 下安装Python包(Numpy)的错误:Unable to find vcvarsall.bat

    情景简介: Windows 环境下安装Python2.7的Numpy扩展包时提示:error: Unable to find vcvarsall.bat 经过不懈的Google/Bing,发现不仅安装 ...

  6. vagrant 打造开发环境

    1 vagrant http://www.vagrantup.com/ 2 veewee https://github.com/jedi4ever/veewee 3 vagrant boxes htt ...

  7. 一篇文章详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉

    前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新.目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种 ...

  8. Guava包学习--EventBus

    之前没用过这个EventBus,然后看了一下EventBus的源码也没看明白,(-__-)b.反正大概就是弄一个优雅的方式实现了观察者模式吧.慢慢深入学习一下. 观察者模式其实就是生产者消费者的一个变 ...

  9. 4、RabbitMQ-消息应答与消息持久化

    消息应答( Message acknowledgment) 1. Message acknowledgment(消息应答) 执行任务可能需要几秒钟.你可能想知道如果其中一个消费者开始一项长期任务并且只 ...

  10. 【转】CopyOnWriteArrayList

    初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList,是在研究JDBC的时候,每一个数据库的Driver都是维护在一个CopyOnWriteArrayLis ...