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. ORA-28001:口令已经失效

    Oracle11G创建用户时缺省密码过期限制是180天(即6个月),如果超过180天用户密码未做修改则该用户无法登录. 查看密码的有效期设置,LIMIT字段是密码有效天数. select * from ...

  2. Java常见错误列表

    Java常见错误列表: 找不到符号(symbol) 类X是public的,应该被声明在名为X.java的文件中 缺失类.接口或枚举类型 缺失X 缺失标识符 非法的表达式开头 类型不兼容 非法的方法声明 ...

  3. linux c编程调用系统的动态库时,要使用dlopen等函数吗?

    同问 linux c编程调用系统的动态库时,要使用dlopen等函数吗? 2012-11-27 21:55 提问者: hnwlxyzhl 我来帮他解答 满意回答 2012-12-07 09:08 li ...

  4. Kafka生产者producer简要总结

    Kafka producer在设计上要比consumer简单,不涉及复杂的组管理操作,每个producer都是独立进行工作的,与其他producer实例之间没有关联.Producer的主要功能就是向某 ...

  5. 捡了一个非常淫荡的PHP后门,给跪了

    <?php unlink($_SERVER['SCRIPT_FILENAME']); ignore_user_abort(true); set_time_limit(0); $remote_fi ...

  6. PetaPoco轻量级ORM框架 - 入门安装

    PetaPoco 是一个开源轻量级ORM,够小,够快,单文件 在GitHub上有很高的人气 1377星,几年来作者一直在更新 当前版本6.0.317 - Netstandard 2.0(同时支持.ne ...

  7. Android Studio Git .gitignore文件配置忽略不需要的文件

    转载请标明出处: http://www.cnblogs.com/why168888/p/6440805.html 本文出自:[Edwin博客园] # Built application files * ...

  8. 定义路由的state参数

    使用$stateProvider.state('stateName', {url: '', params: {}, views: {},...})创建路由,其中部分参数解析: params: 是一个包 ...

  9. [CQOI2006]凸多边形(半平面相交)

    嘟嘟嘟 本来我要写feng shui这道题的.然后网上都说什么半平面相交,于是我还得现学这个东西,就来刷这道模板题了. 所谓的半平面相交和高中数学的分数规划特别像.比如这道题,把每一条边看成一条有向直 ...

  10. POJ3347 Kadj Squares

    嘟嘟嘟 题意:给出一堆正方形的边长,且这些正方形都是\(45 ^ {\circ}\)斜放着并且紧挨着的,求从上往下看能看到几个正方形. 真是一道好题--跟计算几何关系不大. 想一下,如果我们能求出正方 ...