用广度优先算法如何吃樱桃
Posted 数据结构框架学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用广度优先算法如何吃樱桃相关的知识,希望对你有一定的参考价值。
广度优先遍历算法
![用广度优先算法如何吃樱桃](https://image.cha138.com/20210414/e4c6a1ff12c14eb2a48ec607b02ed7d0.jpg)
1
广度优先搜索遍历
Breadth First Search(简称BFS)
首先访问起始顶点v,访问并且标记
访问与v相邻下一层的全部顶点
在依次访问按照邻接顶点的下一层所有顶点
……访问完成
类似树的层次遍历
将樱桃所在的分支抽象为ABCDE
![用广度优先算法如何吃樱桃](https://image.cha138.com/20210414/c6d413bd51ee4a1cbb9837352a92b71a.jpg)
从A所在的分支开始吃樱桃
![用广度优先算法如何吃樱桃](https://image.cha138.com/20210414/7cbdf75c2ed34ba7bc547e1a3029995a.jpg)
依次访问B
![用广度优先算法如何吃樱桃](https://image.cha138.com/20210414/fc6da26152d049328b14ef995ec4f45a.jpg)
依次访问C
![用广度优先算法如何吃樱桃](https://image.cha138.com/20210414/12e9361544ba480ca57de5b9898fd381.jpg)
依次访问D
![用广度优先算法如何吃樱桃](https://image.cha138.com/20210414/9faf2ca5160b411495c38a687cd037ec.jpg)
依次访问E
![用广度优先算法如何吃樱桃](https://image.cha138.com/20210414/3fc76662735943318376ace01ccf756d.jpg)
2
算法设计
链式存储结构——邻接表
typedef 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
数据结构框架学习
以上是关于用广度优先算法如何吃樱桃的主要内容,如果未能解决你的问题,请参考以下文章