图的遍历

深度优先搜索(Depth First Search , DFS)  

  --深度优先搜索--我的理解就是分身术的另一种实现方法---用分身术将所有能看到的路都走一遍----这就是深度搜索---

下面给一个图  让大家理解一下

void DFS(Vertex V)  //深度优先搜索的伪码描述
{
visited[V]=ture; //先点亮这个节点的灯
for(V的每个临节点 W) //站在V的位置 所有能看到的灯 W
if(!Visited[W])//如果没有亮
DFS(W);//走到这个灯的位置递归的点亮(递归确实很难理解,但是在前面我已经给了两个训练递归思想的代码,你还记得么?)
} //不得不说 虽然递归十分耗费内存但是递归确实 很好用.

越看感觉越想   树的先序遍历,有木有?    递归的思想是一样的(你在树那里的遍历方法有几种这里可以用不?)

----------前面咱们说了两种----图的储存方式----

下面来说一下不同的储存方式 , 用于搜索带来的不同效果.

若有N个节点,E条边 , 时间复杂度是

  ·  用邻接矩阵储存图,有O(N+E)     //  如果用邻接矩阵的话 在这个算法当中相当于  每个节点 每条边都走了一次.

  ·  用邻接矩阵储存图 , 有O(N^2)  //这个怎么说呢 自己想想

void DFS(Vertex V)  //深度优先搜索的伪码描述
{
visited[V]=ture; //先点亮这个节点的灯
for(V的每个临节点 W) //站在V的位置 所有能看到的灯 W
if(!Visited[W])//如果没有亮
DFS(W);//走到这个灯的位置递归的点亮(递归确实很难理解,但是在前面我已经给了两个训练递归思想的代码,你还记得么?)
} //不得不说 虽然递归十分耗费内存但是递归确实 很好用.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------今天听鹏哥说了一上午  也算复习   也算预习    也有收获   ------------

深度优先搜索,就是找一条线  向下面  一直搜  ,,,而广度优先搜索是     从一个点开始  向外面慢慢的扩散------

下面附上广搜的相关.

广度优先搜索(Breadth First Search ,,BFS)

从根节点出发,从上到下 ,从左到右-------具体的实现是借助一个队列---这个前面咱们将堆的时候好像说过.

走过的顺序就是这个

void BFS(Vertex V)  //树的根节点
{
visited[V]=ture; //访问 上面传下来的根节点 并且标记为已访问
Enqueue(V,Q); //将 V 压进队列里面
while(IsEmpty[Q]) //判断队列是否为空
{
V=Dequeue(Q); //出队列 并且赋值给V
for(V的每个临节点W) //V访问 V的每个临节点
{
if(!visited[W]) //如果已经访问 就算了 否则进去,
{
visited[w]=ture;
Enqueue(W,Q); //将刚才被删除的元素的 儿子压进去.
}
}
}
}

邻接矩阵 时间复杂度为  N^2     然而邻接表的时间复杂度是  N+E  思考一下  why?

-----------------------下面开始说  --两种不同的遍历   分别适用的方向.----下面附上一个   大侠走迷宫.-----

给大侠一点规定------大侠喜欢  从十二点方向开始,按照顺时针的方法走路口---------

这时候大侠走出迷宫的  所需要经过的  格子就很多了

如果大侠  按照广搜的方法   仍然   十二点顺时针 是什么情况?

-------------------------不挨着的节点怎么----图不连通?----那还遍历个什么呀?----------------------

连同: 如果从V到W存在一条(无向)路径,则称V和W是连通的.

路径:V到W的路径是一系列顶点{V,v1,v2,v3,...,vn,W}的集合其中任一一对相邻的顶点间都有图中的边.路径的长度是路径中的变数(如果带权的话,则是各边的权重之和) .  如果从V到W之间的所有顶点都不同则成为简单路径.

回路:起点等于终点的路径,  (V ,v1,v2,v3,V           这就是一个回路).

连通图:图中任意两顶点均连通.

图不连通怎么办?

连通分量:无向图的极大连同子图       (好好理解慢慢看).

  极大顶点数:再加一个顶点就不联通了.

  极大边数:包含子图中所有顶点相连的所有边.

G是原图  后面的四个就是无向图G的极大连同子图  从上到下  从左到右的顺序开始说.

第一个 符合上述两点   第二个也符合

第三个  不符合第二点         第四个  不符合第一点

------------------------------------------------------------------------------------------------

下面说说  有向图   有向图分为强连同和弱连同

强连同:有向图中顶点V,W之间存在双向路径,则称V,和W是强连同的.(意思就是说  我也已从V 到W  也可以从W到V  其中不需要必须走同一条路)

强连通图:有向图中任意两顶点均强连同.

强连通分量:有向图的极大强连同子图.

图G的极大强连同子图有两个          第一个  任意两点都可以连同 并且 再多一个 就不行了   第二个      也是

void DFS(Vertex V)             //最终将所有连通的都  遍历了.
{
visited[V]=ture;
for(V的每个节点W)
if(!visited[w])
DFS(W);
}
/*不连通的怎么遍历呢?*/
void ListComponents(Graph G)
{
for(each V in G) //向下输送所有的 不连通分量
if(!visited[v])
{
DFS(v); // or BFS[v];
}
}

拯救007......007被   困在了一个孤岛上面    湖里面都是鳄鱼   英勇的零零七 决定一  鳄鱼头当成  跳板跳到河岸上面下面附图

这一道题 深度优先   和广度优先 都可以  但是 根据实际问题来看  深度优先 可能更好一点.

我们在上面第一个程序上做一个 修改.

void Save007(Graph G)
{
for(each V in G) //孤岛上面的 所有相邻的 岛一个一个试 知道 跳出去.
{
if(!visited[V]&&FirstJumpe[V]) //没有跳过 并且 第一跳可以跳出.
{
answer=DFS[v];
}
}
if(answer==YEs)
output("Yes");
else
output("NO");
}

图的遍历---------开始开始-------o(∩_∩)o 哈哈的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. C++编程练习(9)----“图的存储结构以及图的遍历“(邻接矩阵、深度优先遍历、广度优先遍历)

    图的存储结构 1)邻接矩阵 用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中边或弧的信息. 2)邻接表 3)十字链表 4)邻接多重表 5)边集数组 本文只用代码实现用 ...

  3. Kruskal和prime算法的类实现,图的遍历BFS算法。

    一.图的遍历 #include<iostream> #include<queue> #include<vector> using namespace std; in ...

  4. 图的遍历——DFS(矩形空间)

    首先,这里的图不是指的我们一般所说的图结构,而是大小为M*N的矩形区域(也可以看成是一个矩阵).而关于矩形区域的遍历问题经常出现,如“寻找矩阵中的路径”.“找到矩形区域的某个特殊点”等等之类的题目,在 ...

  5. 图的遍历——DFS和BFS模板(一般的图)

    关于图的遍历,通常有深度优先搜索(DFS)和广度优先搜索(BFS),本文结合一般的图结构(邻接矩阵和邻接表),给出两种遍历算法的模板 1.深度优先搜索(DFS) #include<iostrea ...

  6. 图的遍历算法:DFS、BFS

    在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为深度优先搜索(DFS)和广度优先搜索(BFS). DFS(深度优先搜索)算法 Depth-First-Search 深度优先 ...

  7. 15 图-图的遍历-基于邻接矩阵实现的BFS与DFS算法

    算法分析和具体步骤解说直接写在代码注释上了 TvT 没时间了等下还要去洗衣服 就先不赘述了 有不明白的欢迎留言交流!(估计是没人看的了) 直接上代码: #include<stdio.h> ...

  8. python 回溯法 子集树模板 系列 —— 8、图的遍历

    问题 一个图: A --> B A --> C B --> C B --> D B --> E C --> A C --> D D --> C E -- ...

  9. [图的遍历&多标准] 1087. All Roads Lead to Rome (30)

    1087. All Roads Lead to Rome (30) Indeed there are many different tourist routes from our city to Ro ...

随机推荐

  1. [MGR——Mysql的组复制之多主模式 ] 详细搭建部署过程

    组复制可以在两种模式下运行. 1.在单主模式下,组复制具有自动选主功能,每次只有一个 server成员接受更新.2.在多主模式下,所有的 server 成员都可以同时接受更新.   组复制与异步主从复 ...

  2. RESTful API设计规范收集

    说明:其实没有绝对的规范,达到90%即可. 理解RESTful架构:http://www.ruanyifeng.com/blog/2011/09/restful.html RESTful API 设计 ...

  3. HTML DOM对象的属性和方法介绍(原生JS方法)

    HTML DOM对象的属性和方法介绍 DOM 是 Document Object Model(文档对象模型)的缩写. DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口), ...

  4. Hadoop在window上运行 user=Administrator, access=WRITE, inode="hadoop"

    win7下eclipse中错误的详细描述如下: org.apache.hadoop.security.AccessControlException: org.apache.hadoop.securit ...

  5. js 判断对象中所有属性是否为空

    测试: var obj = {a:"123",b:""}; for(var key in obj){ if(!obj[key]) return; } 函数封装: ...

  6. webservice0基础

    在学习webservice的时候,常常将ns和url花了好久时间才理解过来,这里备份下. 首先定义接口: @WebService public interface IService { @WebRes ...

  7. Unity 3D 中动态字体的创建

    原创不易,转载请注明转自: http://blog.csdn.net/u012413679/article/details/26232453 ---- kosion 1.载入NGUI插件包,载入完毕后 ...

  8. 使用RNN解决句子对匹配问题的常见网络结构

    /* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 除了序列标注问题外,句子对匹配(Sentence Pair Matching)问题也是NLP中非经常见 ...

  9. iOS 浅谈MVC设计模式及Controllers之间的传值方式

    1.简述你对MVC的理解? MVC是一种架构设计.它考虑了三种对象:Model(模型对象).View(试图对象).Controller(试图控制器) (1)模型:负责存储.定义.操作数据 (2)视图: ...

  10. Source code for redis.connection

    redis.connection — redis-py 2.10.5 documentation http://redis-py.readthedocs.io/en/latest/_modules/r ...