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