图 ADT接口 遍历运算 常规运算 邻接矩阵实现
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接口 遍历运算 常规运算 邻接矩阵实现的更多相关文章
- 二叉树 ADT接口 遍历算法 常规运算
BTree.h (结构定义, 基本操作, 遍历) #define MS 10 typedef struct BTreeNode{ char data; struct BTreeNode * lef ...
- PTA 邻接矩阵存储图的深度优先遍历
6-1 邻接矩阵存储图的深度优先遍历(20 分) 试实现邻接矩阵存储图的深度优先遍历. 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)( ...
- C语言实现邻接矩阵创建无向图&图的深度优先遍历
/* '邻接矩阵' 实现无向图的创建.深度优先遍历*/ #include <stdio.h> #include <stdlib.h> #define MaxVex 100 // ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 一张图彻底搞懂JavaScript的==运算
一张图彻底搞懂JavaScript的==运算 来源 https://zhuanlan.zhihu.com/p/21650547 PS:最后,把图改了一下,仅供娱乐 : ) 大家知道,==是JavaSc ...
- java数据结构_附11_图的接口定义
图的接口定义 Graph public class UnsupportedOperation extends RuntimeException {public UnsupportedOperation ...
- 图的深度优先遍历DFS
图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件 ...
- PTA 邻接表存储图的广度优先遍历(20 分)
6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
随机推荐
- Python实例---抽屉热搜榜前端代码分析
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在IIS上发布网站后,在编译时出现CS0016拒绝访问错误
错误如下图所示: 关键性错误信息: 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Te ...
- SSH端口三种转发方式
本地转发 假设有ssh服务器B,telnet服务器C被防火墙与外界隔离,此时外部主机A无法直接访问C服务器. 此时可以通过本地转发的方式让A与C借助B服务器通过ssh协议通信. client fire ...
- Azure Internet 负载均衡器建立
摘自微软官方文档 Azure load balancer 是位于第 4 层 (TCP, UDP) 的负载均衡器. 该负载均衡器可以在云服务或负载均衡器集的虚拟机中运行状况良好的服务实例之间分配传入流量 ...
- MVC4发布到IIS,出现HTTP 错误 404.0 - Not Found的解决方法
MVC4发布到IIS,出现HTTP 错误 404.0 - Not Found的解决方法 1.出现的错误页面
- Django的视图响应类型
Django的视图响应类型 一. 视图函数编写原则 视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能:视图函数可以返回Web文本,页面.重定向.错误.图片等任何内容:视图函数通过H ...
- MVC渲染文章内容的html标签转义
文章详情页一般从数据库中取出文章内容,文章内容一般含有 等html标签,MVC中如果直接从模型输出文章内容,会把html标签转义变成<>等,这时候是要把转义后的标签变成html标签, ...
- 23、springboot与缓存(1)
一.JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry. 1.CachingPro ...
- [Python 多线程] Barrier (十一)
Barrier 栅栏,也叫屏障.可以想象成路障.道闸. Python 3.2引入的新功能. 构造方法: threading.Barrier(parties, action=None, timeout= ...
- Hadoop学习笔记---HDFS
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐 ...