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

电商网站建设优化高端网站设计建站

电商网站建设优化,高端网站设计建站,公司英文网站建设,芜湖最新通知今天文章目录 前言 一 走迷宫问题 二 为什么最先找到为最小的路径 三 为什么要使用队列 四 整体思路 总结 前言 由于对于搜索路径问题,我们如果用深度搜索dfs的话,时间会花费很多很多,所以我们就有了广度搜索bfs来搜索路径问题 深度优…

文章目录

前言

一  走迷宫问题 

二  为什么最先找到为最小的路径

三  为什么要使用队列

四  整体思路

总结


前言

由于对于搜索路径问题,我们如果用深度搜索dfs的话,时间会花费很多很多,所以我们就有了广度搜索bfs来搜索路径问题


深度优先和广度优先,这个概念我已经在树的章节已经讲过了
数据结构 树2-CSDN博客
可以去看看


一  走迷宫问题 


接下来我们用一个题目来讲解引入bfs

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<utility>
using namespace std;
//二元组
typedef pair<int,int> PII;const int N = 1010;
int n;
int map [N][N];  //地图
int dist[N][N];  //路径
queue<PII>q;int dx[]={-1,0,1, 0};
int dy[]={ 0,1,0,-1};int bfs(int x1,int y1,int x2,int y2){//初始化路径数组,这个直接对内存操作十分快memset(dist, -1, sizeof(dist));q.push({x1,y1});dist[x1][y1]=0;while(!q.empty()){//取走队列的头auto t=q.front();//记得弹出q.pop();for(int i=0;i<4;i++){int a=t.first +dx[i];int b=t.second+dy[i];if(a<1||a>n||b<1||b>n)continue;if(map[a][b]!=0)continue;if(dist[a][b]>0)continue;q.push({a,b});dist[a][b]=dist[t.first][t.second]+1;if(a==x2&&b==y2){return dist[a][b];}}}return -1;
}int main(){scanf("%d",&n);//当我们要输入为一行数字之后要拆开的话,直接用字符for(int i=1;i<=n;i++){char line[N];scanf("%s",line);for(int j=1;j<=n;j++){map[i][j]=line[j-1]-'0';}}int x1,y1,x2,y2;scanf("%d %d %d %d",&x1,&y1,&x2,&y2);int result = bfs(x1,y1,x2,y2);printf("%d",result);return 0;
}

我们拿到这个题目的时候
我们先以dfs分析一边

我们上面有一个5*5的迷宫,我们什么时候要回溯
1   我们之前走过的路,我们不可能往回走
2   碰到障碍物1的时候就要回走
3   超出矩阵的范围的时候要回走
我们可以看到dfs处理这个问题很慢,当到了23*23的矩阵的时候,好像就存储不过来了,所以我们就要用bfs来解决

bfs就相当于是dfs的减枝,当我们判断有最小的时候,直接返回,因为是范围搜索,我们来画一个图就知道了

它是直接把这个每层逐层搜索的,也就是说这个树不是按照深度画的,而是按照层次来画的,这样我们就可以不要一直走到底来判断这个是否可以
但是bfs的时间比dfs的时间少了很多,但是bfs的空间开销比dfs的开销大了很多
但是我们择优选择选择bfs来解决

我们比赛通常内存大小为64MB,这个大小相当于大概可以开出1E6次方的int类型的数组,然后我们队列是开在堆的,这样可以避免爆栈


二  为什么最先找到为最小的路径


对于所有边长度相同的情况,比如地图的模型,bf3第一次遇到目标点,此时就定是从根节点到目标节点最短的路径(因为每一次所有点都是向外扩张一步,你先遇到,那你就一定最短)。bfs先找到的一定是最短的。

但是如果是加权边的话这样就会出问题了,bfs传回的是经过边数最少的解,但是因为加权了,这个解到根节点的距离不一定最短。比如1000+1000是只有两段,1+1+1+1有4段,由于bfs返回的经过边数最少的解,这里会返回总长度2000的那个解,显然不是距离最短的路径。此时我们就应该采用Diikstra最短路算法解决加权路径的最短路了

加权路径要使用Diikstra最短路算法解决

三  为什么要使用队列

 为什么需要队列?
正如以上所说,我们需要一层一层去遍历到所有结点,那么相邻结点的访问顺序如何确定?

因此我们就需要一个数据结构去存储和操作,需要使得先遍历到的结点先被存储,直到当前层都被存储之后,按照存储的先后顺序,先被存储的结点也会被先取出来继续遍历他的子节点--->综上所述,需要一种特点为先进先出的数据结构也就是队列! Queue!

queue的特点是: 先进先出(first in first out --- IFO)

我们不难发现,这个深度搜索,这个是节点挨着节点,然后我们把节点放入之后,就可以根据这个节点找到下一个节点,但是深度搜索顺序是由你规定的,然后我们如果想从左到右搜索,我们就直接放入,因为队列本来就是按照顺序的,我们只要用队列头的来把子节点放入

四  整体思路

其思路为从图上一个节点出发,访问先访问其直接相连的子节点,若子节点不符合,再问其子节点的子节点,按级别顺序(一层一层)依次访问,直到访问到目标节点。

起始:将起点(源点,树的根节点)放入队列中
扩散:从队列中取出队头的结点,将它的相邻结点放入队列,不断重复这一步
终止:当队列为空时,说明我们遍历了所有的结点,整个图都被搜索了一遍


总结

我们当遇到
一个点是否可以到达另外一个点
到达那个点最小的步数是多少的时候
我们直接考虑使用bfs来解决

bfs最核心的就是坐标的确定和队列使用


文章转载自:

http://sf66GO6A.kbdrq.cn
http://UGrj2oHK.kbdrq.cn
http://uGweHm5H.kbdrq.cn
http://n75ey6mE.kbdrq.cn
http://Q4VHJp4s.kbdrq.cn
http://LYupFX4y.kbdrq.cn
http://cz3KioG8.kbdrq.cn
http://pG7MxtW2.kbdrq.cn
http://C0jhE6Zh.kbdrq.cn
http://BprayUwt.kbdrq.cn
http://C4MoBKWt.kbdrq.cn
http://OuZ31tjr.kbdrq.cn
http://WIzJcn10.kbdrq.cn
http://MywRQgmT.kbdrq.cn
http://5Rq7po2k.kbdrq.cn
http://NH17lOWz.kbdrq.cn
http://BadJDpRi.kbdrq.cn
http://OQ88b9sq.kbdrq.cn
http://yk1ksHQi.kbdrq.cn
http://NotxqwhC.kbdrq.cn
http://oK2V1sbG.kbdrq.cn
http://6o6KMuhB.kbdrq.cn
http://j9uqwi5e.kbdrq.cn
http://6ARjLiz4.kbdrq.cn
http://Gbj8iJcX.kbdrq.cn
http://wd81vvfB.kbdrq.cn
http://XzIMzFzw.kbdrq.cn
http://coPWhWLV.kbdrq.cn
http://wQMGJMyq.kbdrq.cn
http://1tdmoSKA.kbdrq.cn
http://www.dtcms.com/wzjs/689281.html

相关文章:

  • 网站建设都是模板网站地址栏图标怎么做
  • 如果创建网站最好用的crm
  • 网站建设公司重庆豆浆怎么制作教程
  • 北理离线《网站开发与应用》代理招商网免费加盟
  • 网站搭建收费参考开淘宝店做网站开发
  • 游戏网站开发难度做一个小程序需要多少钱?
  • 商洛网站建设公司电话建设摩托车125价格
  • 网站建设和原则母婴网站建设前期规划
  • 国内电商网站跳出率是多少wordpress xmlrpc攻击
  • 菏泽官方网站蚁坊软件舆情监测系统
  • 文章网站后台管理系统怎样建设一个好的网站
  • 新蔡县做网站收多少钱福州工程建设信息网站
  • 下载flash网站江西智能网站建设哪家好
  • 博客网站设计方案什么类型的网站开发比较困难
  • 网站公司网站定制广告设计月薪多少钱
  • 社交网站有哪些如何做wordpress编辑器段间距
  • 如何快速做单页面网站seo计费系统登录
  • 永州网站建设优化十大看免费行情的软件下载大全
  • 互联网网站建设公司两学一做 官方网站
  • 有没有专业做挂的网站盐城网站关键词优化
  • 开化网站建设东莞网站优化教程
  • 罗湖区网站建设多少钱手工制作小店铺
  • 端午节网站建设装修公司网站建设方案
  • 做化工贸易要用那些网站推广网站域名备案号查询
  • 怀化网站优化联系方式数商云官网
  • 网站机房建设流程腾讯云远程安装wordpress
  • 大连网站建设哪个公司好互联网怎么学
  • 龙岗网站改版搜索引擎查重
  • 织梦网站手机版怎么做最吉利旺财的建筑公司名字
  • 怎么做qq空间支付网站网站建设公司 销量