当前位置: 首页 > news >正文

数据结构-邻接表广度优先搜索(C语言版)

对于一个有向图无向图,我们下面介绍第二种遍历方式。

广度优先搜索,即优先对同一层的顶点进行遍历。

如下图所示:

该例子,我们有六个顶点, 十条边。

对于广度优先搜索,我们先搜索a,再搜索abcd,最后搜索ef。

而对于广度优先搜索,我们需要一个队列来辅助我们进行广度优先搜索(先进先出)。

同时我们还需要一个visit数组来判断某个顶点是否已经被搜索过了。

#include<stdio.h>#define MAX_NUM 100
typedef struct ArcNode{				//边 int adjvex;struct ArcNode *next;int weight;
}ArcNode;		typedef struct{						//头结点 char vertex;ArcNode *firstarc;
}VNode;typedef VNode Adjlist[MAX_NUM];			//邻接表 typedef struct{			//建立邻接表 Adjlist adjlist;int vexnum,arcnum;
}ALGraph;void DFSTraverse(ALGraph *G)		//深度优先搜索 
{int v;int visit[G->vexnum];for(v=0;v<G->vexnum;v++){visit[v] = 0;}for(v=0;v<G->vexnum;v++){if(visit[v]==0)DFS(G,v,visit);}
}void DFS(ALGraph *G,int v,int *visit)		//深度优先搜索后继结点判断 
{int w;ArcNode *p;printf("访问顶点:%c\n",G->adjlist[v].vertex);visit[v] = 1;p = G->adjlist[v].firstarc;while(p){w = p->adjvex;if(visit[w]==0)DFS(G,w,visit);p = p->next;}
}void BFSTraverse(ALGraph *G)		//广度优先搜索后继节点判断 
{int v,w,u;int Q[G->vexnum+1],r,f;int visit[G->vexnum];for(v=0;v<G->vexnum;v++)visit[v] = 0;f = 0,r = 0;for(v=0;v<G->vexnum;v++){if(visit[v]==0){visit[v] = 1;printf("第%d个结点是->%c\n",v,G->adjlist[v].vertex);Q[r] = v;r = (r+1)%(G->vexnum+1);while(f!=r){u = Q[f];f = (f+1)%(G->vexnum+1);ArcNode *p = G->adjlist[u].firstarc;while(p){if(visit[p->adjvex]==0){visit[p->adjvex] = 1;printf("第%d个结点是->%c\n",p->adjvex,G->adjlist[p->adjvex].vertex);Q[r] = p->adjvex;r = (r+1)%(G->vexnum+1);}p = p->next;}}}}
}int main()
{return 0;
}

运行结果如下:

http://www.lryc.cn/news/218874.html

相关文章:

  • Py之auto-gptq:auto-gptq的简介、安装、使用方法之详细攻略
  • 【Linux】Linux+Nginx部署项目(负载均衡动静分离)
  • C++笔记之vector的成员函数swap()和data()
  • Linux centos环境 安装谷歌浏览器
  • go-gin-vue3-elementPlus带参手动上传文件
  • 艺术的维度:洞察AI诈骗,优雅防范之艺术
  • JavaScript的作用域和作用域链
  • 电脑文件批量重命名攻略:高效操作技巧助您轻松完成任务
  • 四、三种基本程序结构
  • 深入理解元素的高度、行高、行盒和vertical-align
  • 什么叫储能能量管理单元EMU?储能能量管理单元EMU功能?储能EMU是什么?储能能量管理系统如何实现一次调频AGC-AVC功能?
  • 机器学习之决策树
  • 聊聊logback的UNDEFINED_PROPERTY
  • 记一次pdjs时安装glob出现,npm ERR! code ETARGET和npm ERR! code ELIFECYCLE
  • Zabbix如何监控腾讯云NAT网关
  • SpringBoot案例(数据层、业务层、表现层)
  • 交叉编译程序:以 freetype 为例
  • spring-cloud-starter-dubbo不设置心跳间隔导致生产者重启no Provider问题记录
  • 【数据结构】败者树的建树与比较过程
  • GlobalMapper---dem生成均匀分布的网格,或者均匀分布的点高程点
  • k8s系列文章一:安装指南
  • Pod 进阶
  • Proteus仿真--12864LCD显示计算器键盘按键实验(仿真文件+程序)
  • pam_radius库的使用
  • qt6:无法使用setFontColor
  • 竞赛 深度学习疫情社交安全距离检测算法 - python opencv cnn
  • 无声的世界,精神科用药并结合临床的一些分析及笔记(十)
  • 构建强大的Web应用之Django详解
  • Linux 之搭建 arm 的 qemu 模拟器
  • uinapp微信小程序隐私政策授权