广度优先遍历 实例


-
广度优先遍历作为一个初学者必备的技能,此资源免费,广度优先遍历是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名
-
2016-09-25
深度优先遍历的习题_course
2007-08-17有一个图G,现在要求G^2。G^2定义为:在G^2中的边(u,v),在G中代表u节点到v节点恰好有两条路径,也就是说在G中存在一条u->w->v的路径。(注:G用邻接矩阵或者邻接表表示) 大家有没有什
1KB
C例子: 广度优先遍历
2015-09-01该程序是我写的博客“一起talk C栗子吧(第四十六回:C语言实例--广度优先遍历)”的配套程序,共享给大家使用
37KB
广度优先搜索例题及代码
2010-11-05广度优先搜索例题及代码详解 通过广度优先搜索的题目练习初步掌握广度优先搜索的机理
有向图深度和广度优先遍历问题(基本概念,别笑我)_course
2012-10-05举个最简单的有向图 b -> a -> c 设a是第一个顶点,这样的有向图从a只能走到c,不可能走到b,那么从a进行遍历,b是否应该遍历到? 我开始一直不太明白严蔚敏书上深度广度优先遍历最外层的那个循
100分问一道面试题,怎么用一个栈来实现二叉树的层次遍历,也就是广度优先遍历_course
2011-10-23一个任意的二叉树,只用一个栈来实现树的层次遍历。 我目前的思路是栈来保存树每层最左边的节点的父节点,然后根据这个节点查找同层下一个节点直到查找为空。 PNode findNext(Stack s, P
图的广度优先遍历问题求教_course
2016-11-29该程序运用邻接矩阵创建图,运行后没有出现图的广度优先遍历的结果的打印。。。请大神帮忙看看我写的广度优先遍历算法哪里出现了问题,万分感激! #include "stdafx.h" #include <iostream.h> #include <conio.h> #include <stdio.h> #include <queue> using namespace std; void EnQueue_Sq( queue<int> &Q , int v ) { Q.push( v ); } int DeQueue_SQ( queue<int> &Q ) { int i = Q.front(); Q.pop(); return i; } //1、邻接矩阵 #define VexType char #define EdgeType int #define INFINITY INT_MAX // 最大值∞ #define Max_Vertex_Num 10 // 最大顶点个数 bool visited[ Max_Vertex_Num ];//辅助数组--遍历使用 struct MGraph{ VexType vexs[ Max_Vertex_Num ]; //顶点数组 EdgeType edges[ Max_Vertex_Num ][ Max_Vertex_Num ];//邻接矩阵 int vexnum; //当前顶点数 int edgenum; //当前边数 //GraphKind kind;//图的种类标志,本练习假定图为无向带权图(即 无向网) }; void DSF_MG( const MGraph &G , int v ); void BFS_MG( const MGraph &G , int v ); /////////////////////////////算法实现///////////////////////////////////// //一、邻接矩阵操作的实现 //1、 创建图 void CreateGraph_MG( MGraph &G )//构造一个具有n个顶点,e条边的无向网(注意:输入必须准确,算法中没有判断非法输入!) { cout<<"请分别输入顶点数目和边的数目:"; cin>>G.vexnum>>G.edgenum; int n = G.vexnum; int e = G.edgenum; int i , j; for (i = 0 ; i < n ; i ++ ) { cout<<"请输入第"<<i<<"个顶点的信息:"; cin>>G.vexs[ i ]; } //初始化邻接矩阵 for ( i = 0 ; i < n ; i ++ ) for ( j = 0 ; j < n ; j ++ ) { G.edges[i][j] = INFINITY; } for ( i = 0 ; i < e ; i ++ ) { int beginNode , endNode; cout<<"请输入第"<<i<<"条边的第一个顶点的编号(从0开始):"; cin>>beginNode; cout<<"请输入第"<<i<<"条边的第二个顶点的编号(从0开始):"; cin>>endNode; cout<<"请输入第"<<i<<"条边的权值(注意为非0值):"; cin>>G.edges[beginNode][endNode]; G.edges[endNode][beginNode] = G.edges[beginNode][endNode]; } //输出图的信息 cout<<"输入完毕!"<<endl; cout<<"顶点数组:["; for (i = 0 ; i < n ; i ++ ) { cout<<G.vexs[ i ]<<" "; } cout<<"]"<<endl; cout<<"邻接矩阵:"<<endl; for ( i = 0 ; i < n ; i ++ ) { for ( j = 0 ; j < n ; j ++ ) { if( G.edges[ i ][ j ] != INFINITY ) printf( "%5d" , G.edges[i][j] ); else printf( "%5c" , '-'); //cout<<G.edges[i][j]<<" "; } //cout<<endl; printf( "\n" ); } } //2、求邻接结点及其度 void Dsp_ArjNodes_MG( const MGraph &G , int v )//输出第v个顶点的所有邻接点信息以及该结点的度(注意i不在取值范围内应提示错误信息) { if(v>=G.vexnum) cout<<"ERROR"<<endl; int count = 0; for(int i=0;i<G.vexnum;i++) { if(G.edges[v-1][i]!=INFINITY){ cout<<"临界结点有"<<i<<endl; count++; } } cout<<"该点的度为"<<count<<endl; } //3、找邻接点 int FirstAdjVex( const MGraph &G , int v )//找到顶点v(v为顶点的index)的第一个邻接点并返回该邻接点的index,如果不存在邻接点,则返回-1 { int j,p=-1,found=1; for(j=0;((j<G.vexnum)&&(found==1));j++) if(G.edges[v][j]!=INFINITY) { p=j; found=0; } return p; } //4、找下一个邻接点 int NextAdjVex( const MGraph &G , int v , int w )//v是G的某个顶点,w是v的一个邻接点,返回v(相对于w)的下一个邻接点(邻接点的index),如果w已经是最后一个邻接点,则返回-1 { int j,p=-1,found=1; for(j=w+1;((j<G.vexnum)&&(found==1));j++) if(G.edges[v][j]!=INFINITY) { p=j; found=0; } return p; } //5、广度优先遍历(主调)--例子 void BFSTraverse_MG( const MGraph &G )//广度优先遍历图 { int v; for (v=0; v<G.vexnum; ++v) visited[v] = false; //初始化访问标志 //开始遍历过程: for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) BFS_MG( G , v ); } //6、以v为起点广度优先遍历(核心函数) void BFS_MG( const MGraph &G , int v )//以v为起点进行广度优先遍历 { queue<int> Q;//定义完队列Q(不需要执行InitQueue_SQ) EnQueue_Sq(Q, v); // v入队列 visited[v] = true; cout<<G.vexs[v]<<" "; while(!Q.empty ()) { int s = DeQueue_SQ( Q );// 队头元素出队 for(int w=FirstAdjVex(G,s);w!=INFINITY;w=NextAdjVex(G,s,w)) if ( !visited[w] ) { visited[w]=true; cout<<G.vexs[w]<<" "; EnQueue_Sq(Q, w); // 访问的顶点w入队列 } // if }//while } void main() { MGraph MG; CreateGraph_MG( MG ); // 打印顶点a的所有邻接点 Dsp_ArjNodes_MG( MG ,3); cout<<"输出广度优先遍历结果:"<<endl; BFSTraverse_MG( MG ); getch(); }
82.2MB
微信小程序源码-合集6.rar
2020-09-04微信小程序源码,包含:图片展示、外卖点餐、小工具类、小游戏类、演绎博览、新闻资讯、医疗保健、艺术生活等源码。
133KB
python 京东预约抢购茅台脚本插件 一键运行
2021-02-26python 京东预约抢购茅台脚本插件 一键运行,按照readme介绍的步骤即可。 已经测试可以抢购得到。 注意:本资源仅用于用来学习,严禁用于任何商业目的,下载之后应当在24小时之内删除。
28KB
各显卡算力对照表!
2018-01-11挖矿必备算力对照!看看你的机器是否达到标准!看完自己想想办法刷机!
-
下载
TurnBased_Battle.unitypackage
TurnBased_Battle.unitypackage
-
博客
PHP中的11个魔术方法
PHP中的11个魔术方法
-
下载
基于单片机的8路抢答器设计.doc
基于单片机的8路抢答器设计.doc
-
下载
常见主流浏览器及其内核.docx
常见主流浏览器及其内核.docx
-
学院
SpringBoot2集成Quartz+Vue动态定时任务(前后分离)
SpringBoot2集成Quartz+Vue动态定时任务(前后分离)
-
博客
中M2021春C、Java入门练习第I段——变量、表达式、分支、循环PTA7-14然后是几点
中M2021春C、Java入门练习第I段——变量、表达式、分支、循环PTA7-14然后是几点
-
学院
xxljob源码分析
xxljob源码分析
-
博客
DataX下载安装及操作
DataX下载安装及操作
-
下载
2020美赛A题数据 世界海水表面温度SST 2000-2020
2020美赛A题数据 世界海水表面温度SST 2000-2020
-
学院
MySQL 存储过程(创建海量数据实验环境)
MySQL 存储过程(创建海量数据实验环境)
-
学院
《文件过滤及内容编辑处理命令》<Linux核心命令系列Series>
《文件过滤及内容编辑处理命令》<Linux核心命令系列Series>
-
博客
MHA部署练习流程记录
MHA部署练习流程记录
-
博客
JVM基础(内存管理,GC机制,类加载)
JVM基础(内存管理,GC机制,类加载)
-
下载
第8章 起重机的电气控制.ppsx
第8章 起重机的电气控制.ppsx
-
学院
MySQL 数据库权限管理(用户高级管理和精确访问控制)
MySQL 数据库权限管理(用户高级管理和精确访问控制)
-
下载
第一章 工业现场网络通信技术的认知.pptx
第一章 工业现场网络通信技术的认知.pptx
-
博客
Redis做缓存时,击穿、穿透、雪崩问题解决方案
Redis做缓存时,击穿、穿透、雪崩问题解决方案
-
下载
浙江工商大学《微积分(下)》4套期末检测卷(含答案).pdf
浙江工商大学《微积分(下)》4套期末检测卷(含答案).pdf
-
博客
最新PHP精美列表商城发卡网站源码响应式版
最新PHP精美列表商城发卡网站源码响应式版
-
学院
华为1+X——网络系统建设与运维(中级)
华为1+X——网络系统建设与运维(中级)
-
博客
基本运算符
基本运算符
-
学院
MySQL 数据库的基本操作(数据完整性约束)
MySQL 数据库的基本操作(数据完整性约束)
-
下载
学习计算机知识,内容丰富,python go java.txt
学习计算机知识,内容丰富,python go java.txt
-
下载
中山大学《结构化学》历年期中考试试卷(含答案).pdf
中山大学《结构化学》历年期中考试试卷(含答案).pdf
-
下载
武汉理工大学《机械原理》期末复习试题(含答案).pdf
武汉理工大学《机械原理》期末复习试题(含答案).pdf
-
下载
第二章 Profibus现场总线通信系统的组建.pptx
第二章 Profibus现场总线通信系统的组建.pptx
-
下载
idcardocr-main.zip
idcardocr-main.zip
-
学院
CCNA_CCNP 思科网络认证 《 综合案例设计_配置高可用企业网络
CCNA_CCNP 思科网络认证 《 综合案例设计_配置高可用企业网络
-
学院
C/C++反汇编解密
C/C++反汇编解密
-
学院
CCNA_CCNP 思科网络认证 三层交换机(VTP 简化 VLAN
CCNA_CCNP 思科网络认证 三层交换机(VTP 简化 VLAN