用广度优先算法如何吃樱桃

Posted 数据结构框架学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用广度优先算法如何吃樱桃相关的知识,希望对你有一定的参考价值。

广度优先遍历算法

用广度优先算法如何吃樱桃

1

广度优先搜索遍历

Breadth First Search(简称BFS)

  • 首先访问起始顶点v,访问并且标记

  • 访问与v相邻下一层的全部顶点

  • 在依次访问按照邻接顶点的下一层所有顶点

  • ……访问完成

类似树的层次遍历

将樱桃所在的分支抽象为ABCDE

用广度优先算法如何吃樱桃

从A所在的分支开始吃樱桃

用广度优先算法如何吃樱桃

依次访问B

用广度优先算法如何吃樱桃

依次访问C

用广度优先算法如何吃樱桃

依次访问D

用广度优先算法如何吃樱桃

依次访问E

用广度优先算法如何吃樱桃


2

算法设计

链式存储结构——邻接表

#define maxsize 100typedef struct ArcNode{ int adjvex;//边指向结点的位置 struct ArcNode *nextarc;//下一条边的指针 int info;}ArcNode;typedef struct{ char data;//顶点数据 ArcNode *firststartc;//指向第一条边的指针}VNode;typedef struct{ VNode adjlist[maxsize];//邻接表 int n,e;//顶点数和边数}AGraph;

算法设计

void BFS(AGraph *G,int v,int visit[maxsize]){ ArcNode *p;//临时结点 int que[maxsize],front=0,rear=0;//模拟队列 int j; cout<<G->adjlist[v].data<<" ";//访结点数据 visit[v]=1;//标记访问 rear=(rear+1)%maxsize;//进队 que[rear]=v;//位置 while(front!=rear) { front=(front+1)%maxsize;//顶点出队 j=que[front]; p=G->adjlist[j].firststartc;//出队指向第一条边 while(!p) { if(!visit[p->adjvex])//未被访问 { cout<<G->adjlist[p->adjvex].data<<" ";//访结点数据 visit[p->adjvex]=1;//标记已经访问 rear=(rear+1)%maxsize;//进队 que[rear]=p->adjvex; } p=p->nextarc;//指向下一条边 } }}//邻接表的存储时间复杂度O(n)


CSDN:yma16

数据结构框架学习


以上是关于用广度优先算法如何吃樱桃的主要内容,如果未能解决你的问题,请参考以下文章

应对笔试手写代码,如何准备深度优先算法 & 广度优先算法?

应对笔试手写代码,如何准备深度优先算法 & 广度优先算法?

Python数据结构-队列与广度优先搜索(Queue)

面试题算法: 广度优先搜索

浅谈网络爬虫中广度优先算法和代码实现

深度优先和广度优先算法