迷宫

题目背景

给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

题目描述

输入格式:

第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。

输出格式:

给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。

输入输出样例

输入样例#1

2 2 1
1 1 2 2
1 2

输出样例#1

1

说明

【数据规模】
1≤N,M≤5

AC代码

#include<bits/stdc++.h>
using namespace std;
int q[101][101];
long long sum=0;
int i,j,n,m,t,sx,sy,x,y,ex,ey;
void dfs(int a,int b)
{if (a==ex&&b==ey)//如果找到了终点 {sum++;//方案数 + 1 return;}else{q[a][b]=0;//把当前节点置为已选择 if (q[a - 1][b] != 0){dfs(a - 1,b);q[a - 1][b] = 1;}if (q[a + 1][b] != 0){dfs(a + 1,b);q[a + 1][b] = 1;}if (q[a][b - 1] != 0){dfs(a,b - 1);q[a][b - 1] = 1;}if (q[a][b + 1] != 0){dfs(a,b + 1);q[a][b + 1] = 1;}//以当前节点为中心向四个方向无限拓展,直到找不到邻节点或碰到障碍物 }
}
int main()
{memset(q,0,sizeof(q));//初始化棋盘所有节点为不可用 cin>>n>>m>>t;//n是行    m是列    t是障碍物的个数 cin>>sx>>sy>>ex>>ey;// sx sy是起点的坐标     ex ey是终点的坐标 for(i=1;i<=n;i++)for(j=1;j<=m;j++)q[i][j]=1;//找到迷宫中所有可走的节点  for(i=1;i<=t;i++){cin>>x>>y;q[x][y]=0;//把障碍物标为不可用 }dfs(sx,sy);//把起点作为入参进行DFS cout<<sum<<endl;//sum是方案总数 return 0;
}

思路总结

step1:先写return的条件
step2:把当前所在的节点设为不可用
step3:搜索4个方向可用的节点
step4:切换到最先找到的节点,选中,重复step2,step3,step4

转载于:https://www.cnblogs.com/LJA001162/p/11220935.html

c++ 深度优先搜索(迷宫)相关推荐

  1. 深度优先搜索-迷宫问题

    引入 我们看一个迷宫: S**. .... ***T (其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地.你需要从S出发走到T,每次只能向上下左右相邻的位置移动,不能走出地图,也不能 ...

  2. 深度优先搜索——迷宫(洛谷 P1605)

    题目选自洛谷P1605 题目是非常经典以及简单的DFS题目 这里给出模板 int dfs(int t) {if(满足输出条件){输出解;}for(int i=1;i<=尝试方法数;i++)if( ...

  3. 深度优先搜索找迷宫的出路

    3. 深度优先搜索 现在我们用堆栈解决一个有意思的问题,定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, ...

  4. 打印数组算法:堆栈与深度优先搜索(迷宫问题)

    每日一贴,今天的内容关键字为打印数组 栈堆的拜访规矩被制约为Push和Pop两种作操,Push(入栈或压栈)向栈顶添加元素,Pop(出栈或弹出)则掏出前当栈顶的元素,也就是说,只能拜访栈顶元素而不能拜 ...

  5. 深度优先搜索—走迷宫

    例题:走迷宫 1.需要一个终止条件, 2.需要四个搜索方向:上下左右: 3.并且需要使用bool进行标记一个方向是否访问过: 4.如果需要找到多个可行解,那么如果该方向可行,需要取消标记.如果只需要也 ...

  6. 基于A*搜索和深度优先搜索解迷宫问题

    摘 要 迷宫问题是指能够从起始点寻找一条通往目标点的路径,迷宫的传统搜索是采用深度优先和宽度优先搜索,虽然也能够解决迷宫的求解问题,但是这些方法效率比较低.我们已经知道深度优先和广度优先搜索归于为盲目 ...

  7. 迷宫(深度优先搜索)

    迷宫(深度优先搜索) 题目描述: 一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道.看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输 ...

  8. 迷宫问题的求解(广度和深度优先搜索)

         迷宫问题主要可以分为两类,一个是深度优先搜索和广度优先搜索.      广度优先搜索常用于求最优解(如最短时间,最优路径等),站在一个点上,首先试一试自己周围的点是否可以走,如果是路则加入待 ...

  9. 迷宫问题 深度优先搜索【c++】

    文章目录: 一.问题描述 二.结果展示 三.求解思路 1.题目分析 2.找到迷宫的所有解--左/右手法则 3.解决回路问题 四.详细设计 1.数据结构设计 2.算法设计 五.问题与反思 六.作者的碎碎 ...

最新文章

  1. 未来网络经济的99个趋势报告
  2. STM32 内存管理实验
  3. App icon和启动图的尺寸需求(没有iPad)
  4. Android实现网页的放大与缩小
  5. Windows To Go:Windows 8住进U盘里
  6. php生成网页,php – 网页生成(CMS喜欢)
  7. Mysql数据库(三)——mysql数据库高级操作
  8. Angular 应用里的 vendor.js 是用来干什么的?
  9. MyBatis学习存档(4)——进行CRUD操作
  10. 进程和线程的定义、区别与联系
  11. Word标题:自动编号
  12. MySQL数据库的DQL(数据查询语言)使用---指定查询字段、去重(distinct)、where条件子句、联表查询(xxx join)、分页(order by)和排序(limit)
  13. 【小峰の题单】网络流经典题目
  14. 外贸七日通 第六日 合作篇 与货代打交道
  15. 在verilog中将 .txt文件读入reg/将reg的数据写入.txt
  16. 使用Axure制作手风琴菜单
  17. 【python数据类型】
  18. I/O 的五分钟法则
  19. 如何在QEMU上执行iOS并启动一个交互式bash shell,内含整个安装流程并且提供了相关工具(二)
  20. php开发和java的区别

热门文章

  1. 【ACM】杭电1141:Factstone Benchmark
  2. nagios中自己写的监控mysql主从复制的插件
  3. Nginx+Keepalived+Tomcat之动静分离的web集群
  4. Exchange bin先常用工具
  5. 安卓开发 adb命令使用
  6. Windows 安装 NoneBot2
  7. Python调用PyAutoGUI模块
  8. python调用nacos账号密码,Python脚本,使用私钥(如果可用)或用户名密码
  9. 【面试题】Redis中是如何实现分布式锁的
  10. JSON.parse()和SON.stringify()