当前位置: 首页 > news >正文

地矿局网站建设方案免费服务器

地矿局网站建设方案,免费服务器,建设银行网站怎么登陆不,现在的网站一般做多宽最好目录 一.深度优先搜索遍历 1.深度优先遍历的方法 2.采用邻接矩阵表示图的深度优先搜索遍历 3.非连通图的遍历 二.广度优先搜索遍历 1.广度优先搜索遍历的方法 2.非连通图的广度遍历 3.广度优先搜索遍历的实现 4.按广度优先非递归遍历连通图 一.深度优先搜索遍历 1.深…

目录

一.深度优先搜索遍历

1.深度优先遍历的方法

2.采用邻接矩阵表示图的深度优先搜索遍历

3.非连通图的遍历

二.广度优先搜索遍历

1.广度优先搜索遍历的方法

2.非连通图的广度遍历

3.广度优先搜索遍历的实现

4.按广度优先非递归遍历连通图


一.深度优先搜索遍历

1.深度优先遍历的方法

从图中一个未访问的顶点V开始,沿着一条路一直走到底,如果到达这条路尽头的节点 ,则回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成。

以下面无向图为例,2为起点

(1)以2为起点访问1

(2)以1为起点,因为“1”和“2”之间的边已经走过,所以走3

(3) 同理,以3为起点访问5

(4)到5后,没有可访问的点,返回3,3也没有可访问的点,到1后,可访问之前没有访问过的4

(5)4访问6,至此,遍历完所有的点,DFS(深度优先搜索遍历):2->1->3->5->4->6

 2.采用邻接矩阵表示图的深度优先搜索遍历

#define MAX_VERTEX_NUM 100typedef struct {// 定义图的相关信息int vexnum;                    // 顶点数int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];  // 邻接矩阵// 其他成员...
} AMSGraph;bool visited[MAX_VERTEX_NUM];      // 记录顶点是否被访问过void DFS(AMSGraph G, int v)
{cout << v;visited[v] = true;for (int w = 0; w < G.vexnum; w++) {if (G.arcs[v][w] == 1 && !visited[w]) {DFS(G, w);}}
}

http://t.csdn.cn/HmcOt

之前的一篇文章已经详细说明了邻接矩阵和邻接表的区别,这里同理

1.用邻接矩阵表示图,遍历图中每一个顶点都要从头扫描该顶点所在行,时间复杂度O(n^{2})

2.用邻接表表示图,虽然有2e个表结点,但只需扫描e个结点即可完成遍历,加上访问n个头结点的时间,时间复杂度为O(n+e)

稠密图适于在邻接矩阵上进行深度遍历;

稀疏图适于在邻接表上进行深度遍历。

3.非连通图的遍历

左边的连通分量进行深度优先搜索遍历,再在b,g之中选择一个点进行深度优先搜索遍历

其中一种合理的顶点访问次序为:

a,c,h,d,f,k,e,b,g

二.广度优先搜索遍历

1.广度优先搜索遍历的方法

从某个顶点V出发,访问该顶点的所有邻接点V1,V2..VN,从邻接点V1,V2...VN出发,再访问他们各自的所有邻接点,重复上述步骤,直到所有的顶点都被访问过

以如下图为例,起点为V1

 一层一层进行访问,广度优先搜索遍历的结果为:V1->C2->V3->V4->V5->V6->V7->V8

2.非连通图的广度遍历

与连通图类似,在b,g中任意选择一个点开始 

合理的顶点访问次序为:a->c->d->e->f->h->k->b->g

 

3.广度优先搜索遍历的实现

广度优先搜索遍历的实现,与树的层次遍历很像,可以用队列进行实现(出队一个结点,将他的邻接结点入队)

以下动图来自爱编程的西瓜,方便大家理解遍历过程

4.按广度优先非递归遍历连通图

#include <iostream>
using namespace std;const int MAX_SIZE = 100;  // 队列的最大容量
const int MAX_VERTICES = 100;  // 图的最大顶点数struct Queue {int data[MAX_SIZE];int front;  // 队头指针int rear;  // 队尾指针
};struct Graph {  // 定义图bool edges[MAX_VERTICES][MAX_VERTICES];  // 邻接矩阵int numVertices;  // 实际顶点数
};void InitQueue(Queue& Q) {Q.front = 0;Q.rear = -1;
}bool EnQueue(Queue& Q, int x) {if (Q.rear == MAX_SIZE - 1) {// 队列已满,无法插入return false;}Q.data[++Q.rear] = x;return true;
}bool DeQueue(Queue& Q, int& x) {if (Q.front > Q.rear) {// 队列为空,无法出队return false;}x = Q.data[Q.front++];return true;
}bool QueueEmpty(Queue& Q) {return Q.front > Q.rear;
}// 找到顶点u的第一个邻接点并返回
int FirstAdjVex(Graph& G, int u) {for (int v = 0; v < G.numVertices; ++v) {if (G.edges[u][v]) {return v;}}return -1;  // 或者返回一个特殊的值表示找不到邻接点
}// 找到图 G 中顶点 u 相对于顶点 w 的下一个邻接点并返回
int NextAdjVex(Graph& G, int u, int w) {for (int v = w + 1; v < G.numVertices; ++v) {if (G.edges[u][v]) {return v;}}return -1;  // 或者返回一个特殊的值表示找不到下一个邻接点
}void BFS(Graph G, int v) {cout << v;bool visited[MAX_VERTICES] = { false };visited[v] = true;  // 访问第v个顶点Queue Q;InitQueue(Q);EnQueue(Q, v);  // v进队while (!QueueEmpty(Q)) {int u;DeQueue(Q, u);  // 队头元素出队并置为ufor (int w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)) {if (!visited[w]) {  // w为u的尚未访问的邻接点cout << w;visited[w] = true;EnQueue(Q, w);  // w进队(将访问的每一个邻接点入队)}}}
}

广度优先搜索遍历算法的效率

1.如果使用邻接矩阵,则BFS对于每一个被访问到的顶点,都要循环检测矩阵中的整整一行,时间复杂度为O(n^{2})

2.用邻接表来表示图,虽然有2e个表结点,但只需扫描e个结点即可完成遍历,加上访问n个头结点的实践,时间复杂度为O(n+e)
 

 深度优先搜索遍历(DFS)广度优先搜索遍历(BFS)算法的效率

1.空间复杂度相同,都是O(n)(借用了堆栈或队列)

2.时间复杂度只与存储结构(邻接矩阵【O(n^{2})】或邻接表【O(n+e)】)有关,而与搜索路径无关

http://www.ds6.com.cn/news/46480.html

相关文章:

  • 沧州免费网站建设杭州seo工作室
  • 寮步营销型网站建设搜索引擎推广方案
  • 滨湖网站制作国际新闻热点事件
  • 怎么自己做企业网站上海优化网站公司哪家好
  • php网站搭建教程郑州网络营销哪个好
  • 深圳哪家建设网站公司好网站自动推广软件免费
  • 天地做网站泰州网站建设优化
  • 电子商务官方网站建设郑州seo外包顾问
  • 做网站要学c语言营销推广的特点
  • 如何在社交网站上做视频推广方案近三天发生的大事
  • 有教做素食的网站吗广告加盟
  • 湘潭网站建设 诚信磐石网络网站优化技巧
  • 做房地产用什么网站好seo搜索优化推广
  • 阿里云虚拟主机建网站合肥做网站公司哪家好
  • 咨询网站搭建汨罗网站seo
  • 学校门户网站怎么做北京网站优化培训
  • 北京广告百度搜索引擎优化的养成良好心态
  • 阳狮做网站推广网站制作
  • 网站开发协议中的注意事项百度一下你就知道官方网站
  • 仿制手机网站教程新站点seo联系方式
  • 网站建设服务器在国外如何打击新闻联播直播 今天
  • 珠海网站建设尚古道策略长春模板建站代理
  • 营销活动网站百度官方营销推广平台
  • 昆明网站制作维护ks免费刷粉网站推广马上刷
  • 附近网站建设服务公司百度竞价排名模式
  • 可做ppt的长篇英文阅读网站贵阳关键词优化平台
  • 百度k了网站怎么办湖南网站设计
  • 洋桥网站建设推荐几个靠谱的网站
  • 网站开发是BS架构吗友情链接怎么购买
  • 电子商务网站建设实训报告范文济南seo优化公司助力网站腾飞