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

企业为什么选择上市长沙seo智优营家

企业为什么选择上市,长沙seo智优营家,做网站注意什么,wordpress导入ssl证书目录 前言 问题描述 算法思路 定义方向 回溯算法 代码实现 前言 前面我发布了一篇关于迷宫问题的解决方法,是通过栈的方式来解决这个问题的(链接:经典算法-----迷宫问题(栈的应用)-CSDN博客)&#xff…

目录

前言

问题描述

算法思路

定义方向

 回溯算法

代码实现


前言

        前面我发布了一篇关于迷宫问题的解决方法,是通过栈的方式来解决这个问题的(链接:经典算法-----迷宫问题(栈的应用)-CSDN博客),但是这个方法只可以找到一条路径,那么今天我们就进一步去讲解迷宫问题,通过回溯算法来找到全部的路径,下面就一起来看看吧!

问题描述

           给定一个迷宫,指明起点和终点,找出从起点出发到终点的有效可行路径,就是迷宫问题(maze problem)。迷宫可以以二维数组来存储表示。0表示通路,1表示障碍。注意这里规定移动可以从上、下、左、右四方方向移动,求走出迷宫的全部路径

#define m 4
#define n 4int maze[m + 2][n + 2] = {{1, 1, 1, 1, 1, 1},{1, 0, 0, 0, 1, 1},{1, 0, 1, 0, 0, 1},{1, 0, 0, 0, 1 ,1},{1, 1, 0, 0, 0, 1},{1, 1, 1, 1, 1, 1}};

 

算法思路

定义方向

同样的,每走到一个位置就要想该往哪一个方向去走,所以有东南西北这4个方向,每次往一个方向走之后就标记好当前方向和当前位置,然后同样的去进行分享的试探,当走到没路走的时候就进行原路返回。方向的定义如下:

//试探方向存储结构
typedef struct {int xx, yy;
}Direction;
//东南西北
Direction dire[4] = { {0,1},{1,0},{0,-1},{-1,0} };

 回溯算法

        回溯,计算机算法,回溯法也称试探法,它的基本思想是:从问题的某一种状态(初始状态)出发,搜索从这种状态出发所能达到的所有“状态”,当一条路走到“尽头”的时候(不能再前进),再后退一步或若干步,从另一种可能“状态”出发,继续搜索,直到所有的“路径”(状态)都试探过。这种不断“前进”、不断“回溯”寻找解的方法,就称作“回溯法”。递归回溯:由于回溯法是对解空间的深度优先搜索,找到结果或者没找到结果就原路返回去找下一条路。可以看出回溯算法是一种暴力算法,就是彻彻底底的一个一个找,找得到就走,找不到就回去。

对于本期的迷宫问题,我们要想找到全部的路径,就最好去用回溯算法,也就是一个一个找,毕竟实际情况走迷宫也是如此,在不知道的情况下,也只能去一个一个找。对于本题,我们可以这样子走,每走一个地方就把这个地方标记为-1,表示已经走过,当遇到死路的时候,就返回上一个位置,然后换一个方向来走,直到换到可以走得通的方向,走完这条路的话(当前走完的路所有坐标都标记为-1),我们就一直回溯换方向到其他方向能走的位置,直到整个地图全部能走的路都标记为-1,就结束回溯递归。

代码实现

#include<stdio.h>
#define m 4
#define n 4//试探方向存储结构
typedef struct {int xx, yy;
}Direction;
//东南西北
Direction dire[4] = { {0,1},{1,0},{0,-1},{-1,0} };typedef struct node {int x, y;
}Node;
typedef struct path {Node data[100];//标记路径位置的数组int count;//统计节点
}Path;//输出路径
void print(Path p, int* N) {*N += 1;printf("第%d条路径:\n", *N);for (int i = 0; i < p.count; i++) {printf("(%d,%d)->", p.data[i].x, p.data[i].y);}printf("Printover!\n\n");
}void find_path(int maze[][n+2], int* N, int x, int y, int endx, int endy, Path p) {//如果走到终点的时候if (x == endx && y == endy) {maze[x][y] = -1;//把终点位置存入到路径去p.data[p.count].x = x;p.data[p.count].y = y;p.count++;print(p, N);//输出路径//走完了就回到上一个位置,然后换方向走return;}else {//如果当前位置为0,也就是能走的话if (maze[x][y] == 0) {int di = 0;while (di < 4) {//4个方向都进行试探//储存当前位置p.data[p.count].x = x;p.data[p.count].y = y;p.count++;//标记为-1,表示已经走过maze[x][y] = -1;int i, j;//改变方向i = x + dire[di].xx;j = y + dire[di].yy;find_path(maze, N, i, j, endx, endy, p);//递归进入到下一个位置//回溯:回到上一个位置继续操作//当前位置给抹除掉p.count--;maze[x][y] = 0;di++;//改变方向}}//不能走的话就返回,回到上一个位置elsereturn;}
}int main() {int maze[m + 2][n + 2] = {{1, 1, 1, 1, 1, 1},{1, 0, 0, 0, 1, 1},{1, 0, 1, 0, 0, 1},{1, 0, 0, 0, 1 ,1},{1, 1, 0, 0, 0, 1},{1, 1, 1, 1, 1, 1}};Path mp;mp.count = 0;int N = 0;find_path(maze, &N, 1, 1, m, n, mp);
}

结果如下:

 以上就是本期的全部内容了,我们下次见!

分享一张壁纸: 

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

相关文章:

  • 浏览器的网站通知怎么做网络营销推广方案怎么写
  • 法院门户网站建设情况调研推广哪些app最挣钱
  • 做B2C独立网站的话需要做海外仓吗百度竞价投放
  • 广州网站建设亅新科送推广seo软文推广工具
  • 襄阳网站建设公司网站搜索关键词优化
  • 东莞 建网站重庆网站网络推广
  • 电子商务网站设计原则惠州搜索引擎优化
  • 制作单位网站枣庄网络推广seo
  • 青岛 网站制作公司百度app客服人工电话
  • 网站如何集成微信支付10条重大新闻
  • 免费h5页面制作软件信息流广告优化师培训
  • 好看的单页面网站模板百度seo找哪里
  • 网站内链接怎么做淘宝客推广平台
  • wap php网站源码网络优化报告
  • wordpress导航栏做产品分类怎么做好网站搜索引擎优化
  • 域名的格式是什么班级优化大师的功能
  • dramwaver做网站头条站长平台
  • wordpress带手机端seo搜索引擎优化工资
  • git怎么做隐私政策网站seo网站优化工具大全
  • 有那些网站做平面设计订单站长工具综合权重查询
  • 新疆建设工程信息网官方网站搜索引擎营销的名词解释
  • 广州建设银行预约公积金网站广州网站建设公司
  • 网站开发的技术栈宝鸡seo外包公司
  • 网盘视频直接做网站创建站点的步骤
  • 网站建设公司如何做大seo如何挖掘关键词
  • 网站内容的创新模板网站哪个好
  • 衢州网站设计公司有哪些推广引流平台
  • 手机上怎么创建wordpress武汉排名seo公司
  • wordpress修改登录图标四川seo
  • 建设银行e房通网站线上营销策划方案