洛谷 P1605 迷宫

题目链接

https://www.luogu.org/problemnew/show/P1605


题目背景

迷宫


题目描述

给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和

终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫

中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。


输入输出格式

输入格式:

【输入】

第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点

坐标FX,FY。接下来T行,每行为障碍点的坐标。

输出格式:

【输出】

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

案总数。

【数据规模】

1≤N,M≤5


思路

一道连小小小小(此处省略999999个小)蒟蒻都会的搜索水题,却卡了我大半个小时......

原因就是边界条件忘记判断了......(不对,还RE了几次)

建立二维BOOL数组a和vis,a数组表示大地图(赋初值后不再改变),而vis数组则是每次搜索时进行标记和回溯的数组

按要求输入,并将障碍点全部标记为true,不要忘记把起始点也标记为true,然后进行搜索,判断即可

如果搜到了(fx,fy)这个点,就让tot++,最后输出即可


代码

#include<bits/stdc++.h>//还是懒人头文件
using namespace std; int n,m,t;
bool a[][],vis[][];
int x,y;
int sx,sy,fx,fy;//题目要求输入的对象
int f[][]= {{,,},{,,},{,,-},{,,},{,-,}};
int tot=;//答案 /*
inline int read() {
char ch=getchar();
int x=0,f=1;
while(ch<'0'||ch>'9') {
if(ch=='-');
f=-1,ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-48,ch=getchar();
}
return x*f;
}
*/ void dfs(int x,int y) {
if(x==fx&&y==fy) {//找到了就加一再回溯
tot++;
return;
}
for(int i=; i<=; i++) {
int nx=x+f[i][];
int ny=y+f[i][];
if(nx>&&ny>&&nx<=n&&ny<=m&&!a[nx][ny]&&!vis[nx][ny]) {
vis[nx][ny]=true;
dfs(nx,ny);
vis[nx][ny]=false;
}
}
} int main() {
memset(a,false,sizeof(a));
scanf("%d%d%d",&n,&m,&t);
scanf("%d%d%d%d",&sx,&sy,&fx,&fy);
a[sx][sy]=true;//出发点为true
while(t--) {
scanf("%d%d",&x,&y);
a[x][y]=true;
}
dfs(sx,sy);//搜索
cout<<tot<<endl;
return ;
}

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

  1. 洛谷—— P1605 迷宫

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

  2. 洛谷P1605 迷宫——S.B.S.

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

  3. 洛谷P1605 迷宫 (DFS)

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

  4. 洛谷P1605 迷宫【dfs】

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

  5. 洛谷P1605 迷宫

    迷宫 题目链接 这道题就是一道简单的dfs计方案数qwq. 我的思路是把表初始化为1,再将障碍改为0,因为在全局定义中数组会直接初始化为0,所以就少去了对边界的特判. next数组加循环可以减少代码量 ...

  6. 洛谷P1605 迷宫 深度搜索 模板!

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

  7. (Java实现) 洛谷 P1605 迷宫

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

  8. 洛谷 p1605 迷宫问题 详解

    题解:dfs搜索 #include <iostream> #include <algorithm> #include <cstring> #include < ...

  9. 迷宫 洛谷 p1605

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

随机推荐

  1. How To Do Master Record Mass Maintenance

    How To Do Master Record Mass Maintenance Which master records mass maintenance can be done? What do ...

  2. Android Studio 之 注释模板

    我们看有的项目的文档,会发现它的注释写的很好看,很规范. 而如果你的代码注释还是在用简单的 // 或者 /**/  ,那就学习一下在Android Studio中如何进行注释模板的设置 首先看下面代码 ...

  3. github提交代码失败

    向github上面提交代码,提示代码里面有大文件,建议使用git-lfs. 1,安装git-lfs yum install git-lfs 2,配置需要追踪的打文件(由于我这里提交的是jar包) gi ...

  4. MS SQL批量生成作业脚本方法介绍总结

    在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业.如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中 ...

  5. mssql 怎么配置指定的表 不允许删除数据?

    http://www.maomao365.com/?p=5089 <span style="color:red;font-weight:bold;">前言: 前几天收到 ...

  6. 光盘yum源搭建

    先修改基本的yum原源,使其不生效 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak 在修改媒介yum源使其生效 检验是否生效 ...

  7. VMWare 虚拟机设置网络访问

    使用桥接模式 将本机IP设置为和虚拟机IP在同一个可以上网的网段中

  8. SMB协议原理抓包分析

    SMB协议原理抓包分析 目录: 1.SMB概述 2.SMB原理 3.SMB配置 一.SMB概述 SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件.打印机. ...

  9. 【PAT】B1009 说反话

    在输入时直接分别将每个单词放入字符串,逆序输出字符串数组 #include<stdio.h> int main(){ int num=0; char ans[90][90]; while( ...

  10. window中常用的命令

    1.Ctrl+s 保存 2.Ctrl+c 复制 3.Ctrl+v 粘贴 4.Ctrl+x 剪切 5.Ctrl+a 全选 6.Ctrl+f 查找 7.Windows+d 桌面 8.Windows+e 计 ...