樱桃季——用深度优先算法如何吃樱桃
Posted 数据结构框架学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了樱桃季——用深度优先算法如何吃樱桃相关的知识,希望对你有一定的参考价值。
深度优先遍历算法
1
深度优先搜索
Depth First Search(简称DFS)
首先访问出发点v,并且标记
选取与v相邻未被访问的点w,访问且标记
再选取与v相邻未被访问的顶点,访问且标记
循环反复到一个顶点的相邻顶点都被访问,依次退回最近被访问的顶点
类似树的先序遍历
将樱桃所在的分支抽象为ABCDE
接下来从A所在的分支开始吃樱桃
按深度优先继续吃D所在分支的樱桃
按深度优先选择E分支
E已经到底回到D层次的C或则B继续,这里我选择C
最后访问B
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;
算法设计
int visit[maxsize]={0};//访问顶点标记数组,全为0表示未访问
void DFS(AGraph *G,int v)//DFS传入结点位置
{
ArcNode *p;//
visit[v]=1;//1为访问
cout<<G->adjlist[v].data<<" ";//访结点数据
p=G->adjlist[v].firststartc;//指向第一条边的指针
while(!p)
{
if(!visit[p->adjvex])//为0,没有访问
{
DFS(G,p->adjvex);//递归进入函数继续访问
p=p->nextarc;//往后走,下一个结点
}
}
}//邻接表的存储时间复杂度O(n)
CSDN:yma16
数据结构框架学习
以上是关于樱桃季——用深度优先算法如何吃樱桃的主要内容,如果未能解决你的问题,请参考以下文章