传送

这是一道dfs,但是...但是....但是它竟然被放在bfs练习题辣!!!!

打了半天bfs,发现路径不会标记了,于是发现好像有什么不对的,似乎dfs要简单一点,于是半路跑去打dfs,结果打了半天没有输出。。。。又跑回来打bfs。。。。如此循环n遍,甚至找了bfs的题解,但是...蒟蒻到看不懂。回去深思dfs,突然发现没有把走过的路径标记下来......崩溃.....悲伤......&%&^$&^&*^*%&^%(&*^*&%&&^^&((^*&(&*^&^&%&^#$%$$^&%^#$^&(*&^(*^&^&&*(&*()

(某人崩溃到乱码ing)

好了刚才我什么都没有说。

为什么说这道题不是bfs而是dfs呢?

首先,题目要求的是走到终点的方案数,而不是最小步数

如果是求最小步数,那当然是用bfs了。但这里求的是方案数,也就是走到一次终点,ans++,然后把这条路径重新标记为没走过。(回溯)用bfs,也就是把每一步的坐标加入队列。为什么说他不方便回溯呢?这和bfs的搜索顺序有关

箭头为bfs每个节点出现的顺序,所以当我们用bfs走到出口时,会发现该节点的父亲节点的位置已经跑到十万八千里之外了,并且还不能由出队得到父亲节点。

当然,这里有位大神用bfs做的。bfs题解(这是所有的题解...)

这是dfs每个节点出现的顺序,这样回溯到父亲节点就简单多了,直接回溯一步就行,所以这个题选用dfs解法(也就是套个模板)

在此复习一下dfs的模板(from c++一本通)

模板一:

int dfs(k)
{
for(int i=;i<=maxn;i++)//maxn是变化方式的总数
{if(操作合法)
{保存结果;
if(到达目的地)
{输出解;return ;
}
dfs(k+);
回溯;
}
}
}

模板二:

void dfs(k)
{
if(到达目标){输出解; return;}
for(int i=;i<=maxn;i++)
{ if(操作合法)
{标记;
dfs(k+);
回溯;
}
}
}

好了我们开始套模板

#include<iostream>
#include<cstdio>
using namespace std;
int k,n,m,t,sx,sy,fx,fy,dx[]={,-,,},dy[]={,,,-},ans,ljx[],ljy[];
int zx[],zy[];
bool vis[][],bl[][];
bool hf(int x,int y)
{ if(x<||x>n||y<||y>m)return ;
for(int i=;i<=t;i++)
if(x==zx[i]&&y==zy[i])return ;
if(vis[x][y])return ;
return ;
}
void search(int x,int y)
{
if(x==fx&&y==fy)//一个模板
{ans+=;vis[x][y]=;return ;
}
for(int i=;i<=;i++)//四个方向
{ int xx=x+dx[i],yy=y+dy[i];//从当前的x,y向四个方向走(走到下一步时的x与y就是这一步的xx和yy,所以不必有x+=dx[i],y+=dy[i]
if(hf(xx,yy))
{ vis[xx][yy]=;//在判断中以是否走过为主要依据 (原因:每个格只走一次)
search(xx,yy);
vis[xx][yy]=;//回溯
}
}
}
int main()
{ scanf("%d%d%d",&n,&m,&t);
scanf("%d%d%d%d",&sx,&sy,&fx,&fy);
for(int i=;i<=t;i++)
{scanf("%d%d",&zx[i],&zy[i]);
vis[zx[i]][zy[i]]=;//标记走过
}
vis[sx][sy]=;
search(sx,sy);
printf("%d",ans);
}

qwq

洛谷P1605走迷宫的更多相关文章

  1. 洛谷P1238 走迷宫

    洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...

  2. 洛谷P1238 走迷宫题解

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  3. 洛谷——P1238 走迷宫

    P1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数 ...

  4. 洛谷 P1238 走迷宫

    因为小处疏漏,多花了半小时的水题 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束 ...

  5. 洛谷—— P1238 走迷宫

    https://www.luogu.org/problem/show?pid=1238 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走 ...

  6. 【洛谷p1605】迷宫

    (还记得我昨天大概没人看到的博客(我删辽)吗qwq,2019.4.14下午交的qwq 那篇博客大致内容就是:我提交楼上这道题,交了好久好久好久好久 现在我告诉你,那次评测还N/A着呢qwq) tqlq ...

  7. 洛谷P1605:迷宫(DFS)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右 ...

  8. 洛谷 P1605 迷宫

    题目链接 https://www.luogu.org/problemnew/show/P1605 题目背景 迷宫 题目描述 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 ...

  9. 洛谷P1605 迷宫【dfs】

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

随机推荐

  1. Grafana + Prometheus 监控PostgreSQL

    效果图 部署环境 服务器名称 IP地址 部署业务 备注 部署agent sht-sgmhadoopcm-01 172.16.101.54 PostgreSQL 监控服务器.被监控服务器 node_ex ...

  2. Linux下输入某些命令时会提示:bash:command not found

    首先,查看$PATH中是否包含了这些命令. $PATH:决定了shell到哪些目录中去寻找命令或程序,PATH值是一系列的目录.当运行程序时,linux到这些目录下搜索进行编译链接. 格式: PATH ...

  3. 使用VBA,优化处理Excel表格

    前言 上周末,XX给我抱怨:因为计算绩效奖金,把2个人的工资发错了,还被扣了500元.问的缘由得知,她每个月要处理十来个excel表格,每次都要手动修改里面的值,如果修改了一处,其他地方也要修改,然后 ...

  4. gnu make - 初学

    因为要为Linux平台编译ACE,按照ACE的文档如何编译部分的说明,要求使用gnu make.其原文档说明如下: Using the Traditional ACE/GNU Configuratio ...

  5. CCF关于NOIP竞赛程序提交的管理规则

    在NOIP复赛中,NOI各省组织单位必须严格遵循CCF<关于NOIP数据提交格式的说明>的规范在竞赛结束后规定时间内向CCF提交本赛区所有参赛选手的程序. 为竞赛的公平以及赛后按时完成竞赛 ...

  6. Linux下实现ssh免密认证

    添加域名映射 配置ssh免密登陆 拷贝master服务器公钥至本机 验证master服务器ssh免密登录其余服务器 添加域名映射 打开hosts文件 Vim /etc/hosts 添加域名对象 配置s ...

  7. Linux下安装Julia1.0.0

    MIT正式发布编程语言Julia 1.0:Python.R.C++三合一! 由于官方文档提示中安装的不是最新的Julia版本,官方的0.7版本安装方法为:                       ...

  8. 微信连wifi,中文ssid报Invalid sign tosign错误

    Invalid sign tosign错误如上: 是微信官方接受和回传的问题,改固定字符解决: 比如将ssid固定修改为字符串‘ssid’即可:

  9. 蓝牙协议分析(11)_BLE安全机制之SM

    1. 前言 注1:此SM是Security Manager的缩写,非彼SM,大家不要理解歪了! 书接上文,我们在“蓝牙协议分析(10)_BLE安全机制之LE Encryption”中介绍了BLE安全机 ...

  10. 剑指Offer 12. 数值的整数次方 (其他)

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目地址 https://www.nowcoder.com/practice/ ...