c++ 广度优先搜索
时间:2020-01-09
本文章向大家介绍c++ 广度优先搜索,主要包括c++ 广度优先搜索使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <iostream> using namespace std; const int verMax=9; const int queMax=10; // >=9皆可 struct node//声明图形顶点结构 { int vertex; struct node *next; }; typedef struct node *graph; struct node head[verMax];//声明顶点结构数组 int que[queMax]; int front=-1; int rear=-1; int visit[verMax];//查找记录//队列的存入 int enque(int v) { if(rear>=queMax)//队列已满 return -1; else { rear++;//对了尾端指针后移 que[rear]=v;//将值存入队列中 return 1; } } //队列的取出 int deque() { if(front==rear)//队列已空 return -1; else { front++; return que[front]; } } //广度优先搜索法 void BFS(int v) { graph point; enque(v);//存入队列 visit[v]=1;//已查找 cout<<"["<<v<<"]==>"; while(front!=rear) { v=deque(); point=head[v].next; while(point!=NULL)//读入邻接列表所有顶点 { if(visit[point->vertex]==0) { enque(point->vertex);//存入队列 visit[point->vertex]=1;//已查找过的顶点 cout<<"["<<point->vertex<<"]==>"; } point=point->next; } } } //建立邻接顶点至邻接列表内 void create_graph(int v1,int v2) { graph point,New; New=(graph)malloc(sizeof(struct node)); if(New!=NULL) { New->vertex=v2;//邻近顶点 New->next=NULL; point=&(head[v1]); while(point->next!=NULL) point=point->next; point->next=New;//串连在列表尾端 } } //输出邻接列表内数据 void print_graph(struct node *head) { graph point; point=head->next;//设置point为首节点 while(point!=NULL) { cout<<"["<<point->vertex<<"] "; point=point->next; } cout<<endl; } //主程序 void main() { int node[20][2]={ {1,2},{2,1},{1,3},{3,1},{2,4},{4,2},{2,5},{5,2},{3,6},{6,3}, {3,7},{7,3},{4,8},{8,4},{5,8},{8,5},{6,8},{8,6},{7,8},{8,7}}; int i; for(i=0;i<verMax;i++) { head[i].vertex=i; head[i].next=NULL; } for(i=0;i<verMax;i++) visit[i]=0; for(i=0;i<20;i++) create_graph(node[i][0],node[i][1]); cout<<"======Graph======"<<endl; for(i=1;i<verMax;i++) { cout<<"Vertex["<<i<<"]: "; print_graph(&head[i]); } //广度优先搜索 cout<<"Bradth-First-Search:"<<endl<<"&BEGIN==>"; BFS(4); cout<<"END&"<<endl; }
原文地址:https://www.cnblogs.com/tobetterlife/p/12170949.html
- React数据流和组件间的通信总结
- react+redux+webpack教程4
- 洛谷P2391 白雪皑皑(并查集)
- BZOJ4514: [Sdoi2016]数字配对(费用流)
- 3.2数据结构之指针和链表 1748:约瑟夫问题
- 2017值得一瞥的JavaScript相关技术趋势
- 1.5编程基础之循环控制44:第n小的质数
- noi 1.8 11图像旋转
- 为什么实现了equals()就必须实现hashCode()?
- 到天宫做客(2017寒假培训测试压轴题)
- 前端--理解 Promise 的工作原理
- 到天宫做客(2017寒假培训测试压轴题)
- 01:查找特定的值
- 通过QQ浏览器内核看browser性能优化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 5000字 | 24张图带你彻底理解21种并发锁
- JavaScript-变量
- Android应用安装卸载监控
- 细数这些年被困扰过的 TS 问题
- 将WordPress插件Elementor标签插入到WordPress模板文件以使用Elementor编辑
- WordPress自定义新建多区域widget小工具调用
- WordPress调用分类目录 及输出当前分类下的二级目录 和分类文章数量显示
- CSS让Li标签溢出后自动换行
- docker里运行docker命令
- 一次性实战java8 新特性(全)—— Lambda、Optional、stream、DateTime
- 面试Python高频问题汇总
- python自学成才之路 miniconda创建虚拟环境
- 逐行阅读Spring5.X源码(一) BeanDefinition,起点
- linux 磁盘占满 查看占用
- 逐行阅读Spring5.X源码(二) BeanDefinition的父接口-AttributeAccessor 、BeanMetadataElement ,进阶