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. Java学习---常见的模式

    Java的常见模式 适配器模式 package com.huawei; import java.io.BufferedReader; import java.io.IOException; impor ...

  2. 安装office2016和激活。

    严重声明:条件宽裕的同学可以购买正版.请大家多多支持正版. 自己手贱,原本在电脑win10系统上安装的正版office被误删了,联系了客服人员,但是自己的微软账号也忘记了.好想下载个正版的.自己在网上 ...

  3. 十分钟带你学会Http协议和Tomcat服务器的原理

    1. Http协议 1. 什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准 ...

  4. ASP.NET Core 2.1以上 Bootstrap 4前端模板文件,开发环境与发布环境前端模板 environment的使用

    笔者的前端文件如下 笔者增加Bootstrap 4 和 FontAwersome(字体图标),因为Bootsrap 4已经不再包含图标了. ASp.Net Core 中,通常在 _Layout.csh ...

  5. 一点二次插值、二点二次插值 ,matlab

    syms f x a b c; f(x)=3*x^4-4*x^3-12*x^2; q(x)=a*x^2+b*x+c; %二点二次插值 x=[-1.2 -0.8]; ff=diff(diff(f)); ...

  6. windows10 彻底卸载 Docker 和 DockerNAT

    删除docker程序 记事本新建脚本文件 a.ps1,内容如下: $ErrorActionPreference = "SilentlyContinue" kill -force - ...

  7. redis下的adlist

    //adlist.h #ifndef __ADLIST__H__ #define __ADLIST__H__ typedef struct listNode_ { struct listNode_ * ...

  8. [零基础学JAVA]Java SE面向对象部分.面向对象基础(05)

    1.继承 2.多态 3.final 4.重载与覆写 5. this/super 6.抽象类 7.接口 java: class Person{ private String name;    priva ...

  9. python虚拟环境virtualenv高级篇

    我曾经写过一篇virtualenv的博客:http://www.cnblogs.com/anpengapple/p/5907416.html 总体来讲还是适用的,不过稍微傻了一点.这一篇的内容有两个: ...

  10. SpringBoot接口返回去掉空字段

    返回的接口中存在值为null或者空的字段过滤掉 @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMis ...