算法二:深度和广度优先搜索

原创 2015年07月07日 17:37:19
图论

存储:图的邻接矩阵存储法
采用矩阵方式(二维数组)存储,定点个数(n)等于二维数组的大小(n*n)。
第(i,j)表示顶点i到顶点j是否有边,1表示有边,∞表示没有边。
如果是对称矩阵这说明是个无向图。


深度优先搜索depth first search(DFS),时间复杂度O(N^2)
"下一步如何做"和"当下该如何做"是一样的,所以可以采用递归调用方法。

把每一种可能都去尝试一遍(在for循环中实现),当前这一步解决后便进入下一步(递归调用dfs(step+1)。

book[n]标记是否遍历过。

sum标记是否已访问过所有节点。

void dfs(int step)
{
     判断是否找到底部
          return;//返回之前的一步
     尝试每种方法for(i=1;i<=n;i++)

     {

            判断是否有边并且未访问过

                继续下一步dfs(step+1)
     }
     返回

}

应用:搜索,迷宫找人,城市地图的最短行车方案.....

DFS更适合在同一个IP地址中爬虫(长连接处理)。

广度优先搜索breadth first search(BFS),时间复杂度O(N^2)
使用队列,通过一层一层寻找的方法。

queue,head,tail


while(队列没遍历完)
{
    每个方向全找一边for(i=0;i<=n;i++)
    {
        更新下一个节点
        在路经中

              将该点入队,并做标记

        判断是否所有顶点都已经被访问过
              return;//寻找结束

    }
}

应用:搜索,电路板自动布线,航班转机次数最少....

广度优先搜索更加适用于所有边的权值相同的情况。

相关文章推荐

图的深度优先和广度优先搜索算法

图的深度优先和广度优先搜索算法     1.图的深度优先搜索算法:        图的深度优先搜索算法的基本思想是:从图G的某个顶点V0出发,访问V0,然后选择一个与V0相邻且未被访问过的顶点V...

深度广度优先搜索

  • 2013年12月07日 17:30
  • 179KB
  • 下载

十大基础实用算法之深度优先搜索和广度优先搜索

深入讲解了深度优先和广度优先算法的实现,有详细的图解实例以及代码实现,清晰易懂。 使用类的思想实现代码,面向对象分析。...
  • yapian8
  • yapian8
  • 2014年07月15日 11:50
  • 4686

图的基础算法-广度优先搜索/深度优先搜索

图有矩阵存储和链表存储两种。这里采用链表存储。 参考《算法导论》上面的做法,首先定义图结点的结构。为了跟踪算法的进展,广度优先搜索在概念上将每个结点涂成白色。在算法推进过程中,结点的颜色可能变成灰色...

基本图算法(广度优先搜索和深度优先搜索)

图算法对于计算机学科至关重要。成百上千的计算问题最后都可以归约为图论问题。本文主要是对《算法导论》图算法的学习笔记进行整理。 首先,我们先对图算法中的一些表达方式进行统一:给定图G=(V,E),当对该...
  • Linoi
  • Linoi
  • 2014年03月17日 17:54
  • 1496

【经典算法】图的深度优先搜索和广度优先搜索

前面学习了图的邻接表存储,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法二:深度和广度优先搜索
举报原因:
原因补充:

(最多只允许输入30个字)