解题思路:

首先要开一个二维数组储存邻接矩阵,一般的方法是开一个足够大的数组,例如这道题是n不大于50,不过这样做会造成空间不必要的浪费。因此手动分配空间会更为合理。一种方法是用malloc,对应销毁空间的函数是free,这种方法适用于C语言和c++。另一种方法是用new,对应销毁空间的方法是delete,注意malloc对应的是free,new对应的是delete,不能搞混。

主要介绍一下malloc,一维数组开辟空间只需要,int* temp=(int*)malloc(n*sizeof(int))就可以开辟n长度的数组。二维及以上要多几步。例如这道题用于储存邻接矩阵的数组的开辟方法:

int** map=(int**)malloc(vertexNum*sizeof(int));

for(int i=0;i

map[i]=(int*)malloc(vertexNum*sizeof(int));

第二步是广度优先搜索,需要一个队列和一个判断是否被访问过的bool类型的数组visited,队列每出一个点temp,就遍历temp的邻接点,没有访问过就入队,直到队列为空时就可以停止了。

参考代码:

#include

#include

#include

using std::queue;

void initialize(int vertexNum,int** &map){

map=(int**)malloc(vertexNum*sizeof(int));

for(int i=0;i

map[i]=(int*)malloc(vertexNum*sizeof(int));

for(int i=0;i

for(int j=0;j

scanf("%d",&map[i][j]);

}

void BFS(int vertexNum,int** map){

queue Q;

bool* visited=(bool*)malloc(vertexNum*sizeof(bool));

for(int i=1;i

visited[i]=false;

visited[0]=true;

Q.push(0);

while(!Q.empty()){

int temp=Q.front();

printf("%d ",temp);

Q.pop();

for(int i=0;i

if(map[temp][i]!=0&&visited[i]==false){

Q.push(i);

visited[i]=true;

}

}

}

}

int main(){

int** map=NULL;

int vertexNum;

scanf("%d",&vertexNum);

initialize(vertexNum,map);

BFS(vertexNum,map);

return 0;

}

广度优先搜索c语言矩阵,算法7-6:图的遍历——广度优先搜索 (C++代码)相关推荐

  1. 图的遍历——深度优先搜索+广度优先搜索

    一:图的遍历--深度优先搜索 在本文其他内容中只是大体概括了主要的图论内容,更加详细的代码实现及算法分析在此给出. 深度优先搜索(DFS)类似树的先序遍历. 假设初始状态是图中所有顶点未曾被访问,则深 ...

  2. 图的遍历——广度优先搜索(Breadth First Search)

    2019独角兽企业重金招聘Python工程师标准>>> 1.广度优先搜索遍历类似于树的按层次遍历的过程. 假设从图中某顶点V出发,在访问了V之后依次访问V的各个未曾访问过得邻接点,然 ...

  3. 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程

    图的邻接矩阵表示 通常图的表示有两种方法:邻接矩阵,邻接表. 本文用邻接矩阵实现,一是代码量更少,二是代码风格也更贴近C语言.但不论是图的哪种实现方式,其基本的实现思想是不变的. 1:节点的信息,我们 ...

  4. 图的遍历 --- 广度优先搜索【借助队列实现】 + 深度优先搜索【借助递归栈】

    1. >>图的遍历是指从图中的某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问 一次且仅访问一次. 注意:树是一种特殊的图,所以树的遍历实际上也可以看作是一种特殊的图的遍历. ...

  5. 图的遍历(搜索)算法 之 深度优先遍历算法

    图的遍历的定义: 从图中的某个顶点出发访问遍图中的所有顶点,并且每个顶点仅仅被访问一次. 图的遍历算法我们常见的而且用的最多的就有两种:其一是图的深度优先遍历算法:其二是图的广度优先遍历算法.这里我们 ...

  6. 八数码宽度优先搜索python代码_图之遍历--广度优先遍历

    何为广度优先遍历呢? 广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去. 基本思想是: 1.从图中某个顶点V0 ...

  7. Python算法学习[5]—图、遍历、连通、最短路径代码演练

    图.遍历.连通.最短路径&代码演练 图是计算机科学中的一种数据结构,它由节点(顶点)和边组成.在实际应用中,图经常被用来表示复杂系统之间的关系,如社交网络.交通网络等.本文将介绍图的基本概念和 ...

  8. 图之遍历--广度优先遍历

    何为广度优先遍历呢? 广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去. 基本思想是: 1.从图中某个顶点V0 ...

  9. [算法学习no7]图的遍历

    图的遍历分为两种 1.深度优先搜索 2.广度优先搜索 图的遍历难度在于图有闭环,双向 所以一定不要迷路 因此,需要用数组标记访问过的结点即可 1.深度优先搜索 传入参数为结点 输出这个结点 标记这个结 ...

最新文章

  1. 微信小程序wx.request POST获取不到数据解决办法
  2. django开发个人博客
  3. 基于 qiankun 的微前端应用实践
  4. hibernate自动配置_Hibernate自动冲洗的黑暗面
  5. JavaFX 2 GameTutorial第4部分
  6. python字符串的方法和列表的方法_Python 中列表和字符串的方法总结
  7. 浅谈智能摄像机背后的p2p连线技术
  8. XML文件解析--Python
  9. 永恒python怎么用_毫无基础的人如何入门 Python ?Python入门教程拿走不谢啦!
  10. 7-112 约分最简分式
  11. cisco交换机trunk与switchport access vlan vlan-id共存的问题
  12. C语言关键字浅析-do
  13. UnityUI变大和缩小、UI位置设置
  14. 十一放假如何学习Linux等知识
  15. 详细图解解决 CentOS7 yum出现“Could not retrieve mirrorlist”的问题
  16. 通用mapper的使用方法
  17. Charles4.0最新版破解
  18. Phase Shift和PMP(相位测量轮廓法)要解释的几个细节
  19. 兆骑科创创业赛事活动发布平台,创业赛事,项目路演
  20. 毕设小程序随笔-如何在wx.navigateBack()时刷新页面

热门文章

  1. 未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
  2. 解决vue2+vue-cli3项目ie兼容问题
  3. 解决Ubuntu不能全屏问题
  4. 解决pycharm 提示no tests were found的问题
  5. 笔记本电脑黑屏但还在运作怎么办
  6. aidl使用_Android-Service学习鸭-入门实践-远程服务(bindService方式-AIDL)
  7. 麦克纳姆轮全向移动机器人的特性
  8. 麦克纳姆轮平台的两种构型
  9. c语言 char转int_第三章、C语言中的数据类型
  10. 宝塔ssl验证域名失败_自建搜索引擎如何绑定域名?