深度优先搜索(DFS)与广度优先搜索(BFS)

来源:互联网 发布:淘宝哪家文具店好 编辑:程序博客网 时间:2024/06/06 04:57

一、DFS

关于深度优先搜索,主要一个关键词就是深。深是什么意思呢,比如说我们走一个迷宫时可以遵守一个规则,就是无论走到哪个岔路口,我们都优先选择靠近左手边的那条路。这是一条基本的概念,当然还有涉及到这条路是否曾经走过(在算法中可以设置一个标记位)。如果走到了死路,就原路返回到前一个岔路,走靠近左手边的第二个岔路,以此类推。

关于DFS怎么实现?我们可以用到递归的方法。比如说下面一个代码

void DFS(Graph G){      for(Gnode q=G->firsrm;q!=NULL;q=laterm(G,q))      {            DFS(q);       }}
二、BFS

广度优先搜索的关键词在于“层”,意思说我们是一层一层的来访问,类似于树中的层次遍历。在实现这一过程中需要用到队列(queue)类似于下面的伪代码

 void BFS(Graph G){queue <int> q;new Gnode p;p=G;q.push(p)while (!IsEmptyQ(q)){//将结点出入队,访问,放入结点}}


0 0
原创粉丝点击