迷宫题解

2023-05-16

P1605 迷宫
题目背景
给定一个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

解题思路:
这是一道很标准的深搜问题。

标程:

#include<iostream> 
#include<bits/stdc++.h>
using namespace std;
int mm[6][6];
bool temp[6][6];
int dx[4]={0,0,1,-1};
int dy[4]={-1,1,0,0};
int total , n , m , t , fx,fy,sx,sy;
void search(int x , int y)
{
	if(x==fx&&y==fy)
	{
		total++;
		return;
	}
	else
	{
		for(int i = 0 ; i <= 3 ; i++)
		{
			if(temp[x+dx[i]][y+dy[i]]==0&&mm[x+dx[i]][y+dy[i]]==1)
			{
				temp[x][y]=1;
				search(x+dx[i],y+dy[i]);
				temp[x][y] = 0;
			}
		}
	}
}
int main()
{
	cin >> n >> m >> t;
	int l , r;
	for(int ix = 1 ; ix <= n ; ix++)
	{
		for(int iy = 1 ; iy <= n ; iy++)
		{
			mm[ix][iy]=1;
		}
	}
	cin >> sx >> sy;
	cin >> fx >> fy;
	for(int u = 1 ; u <= t ; u++)
	{
		cin >> l >> r;
		mm[l][r] = 0;
	}
	search(sx,sy);
	cout << total << endl;
	return 0;
}

另外再补充一点,对于深搜的模板,使用深搜一个个查,使用一个数组map记录障碍的地方,再使用一个temp来标记自己所走过的路;

int dx[4]={0,0,1,-1};

int dy[4]={-1,1,0,0};

使用自动选择方向来代替4个if判断,有的时候是八个方向,也可以存在二维数组里依次判断八个方向,

int search(int t)
{
    if(满足输出条件)
    {
        输出解;
    }
    else
    {
        for(int i=1;i<=尝试方法数;i++)
            if(满足进一步搜索条件)
            {
                为进一步搜索所需要的状态打上标记;
                search(t+1);
                恢复到打标记前的状态;//也就是说的{回溯一步}
            }
    }
}

这就是常见的深搜模板,
1.第一个if是符合输出解的条件,第二个if是符合进一步搜索的条件;

2.下一步搜索时,不是使用return search(t+1),直接search(t+1);(新手可能会注意不到这个关键的地方,以至于每次写完不知道为什么只得到一个答案就返回主程序了)

3.for循环之后的if可以是多个;

4.for循环边界,
例如:

1>方向是四个,那么边界肯定就是4;
2>素数环需要尝试1至20,那么边界就是20;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

迷宫题解 的相关文章

随机推荐

  • VSCode前端/后端/编程常用插件(自用笔记)

    Chinese Live Server LiveReload One Dark Pro Python
  • CentOS 7 安装python3.7.8 脚本(自用)

    span class token function wget span N no check certificate q O install sh span class token string 34 https raw githubuse
  • python按秒间隔自动下一曲

    span class token keyword import span time span class token keyword import span pyautogui span class token keyword while
  • Ubuntu20.04server树莓派版开机启动sh

    编写脚本 home ubuntu onboot miraionboot sh span class token shebang important bin bash span tmux new session d s mirai tmux
  • tmux自用

    创建新的 tmux new s NAME 回到 tmux attach t NAME
  • flask静态资源加载及修改后的同步更新(小记)

    最近在学着用flask进行web开发 xff0c 在添加背景图片的时候遇到了一些坑 xff0c 记录一下 首先在web开发的时候需要区分一下静态资源和动态资源 xff08 一开始没有想到这个 xff0c 就开始直接插入背景图片 xff0c
  • 用Elastic Beanstalk部署Flask应用

    想问下有没有朋友知道用EB部署本地应用 xff0c 把代码打成zip或者war包之后上传 xff0c 为什么会出现这个错误 xff1f 是如何解决的 xff1f 感觉网上的中文资料太少了 解决 xff1a 需要管理员赋予IAM账户 Admi
  • 用python修改时区为北京时间

    昨天在项目封板前发现在aws的数据库存的时间不是北京时间 xff0c 一开始以为是数据库的问题 xff0c 后来发现是python导致的 查阅资料 xff0c 发现需要使用pytz包的timezone模块 之后 from datetime
  • 网页内嵌第三方iframe的注意事项

    参考资料 xff1a Cookie 的 SameSite 属性 阮一峰的网络日志 ruanyifeng com 记录一下项目组在测试嵌入自主开发的iframe插件时遇到的一个问题 首先需要交代一下背景 xff1a 在Chrome51之后 x
  • 关于CSS中堆叠样式

    发现css有一个参数z index可以控制元素的叠放顺序 xff0c z index越大 xff0c 元素会放在越上层 xff0c 且z index的默认值是auto
  • 如何通过flask-sqlacodegen生成数据库模型

    在项目文件夹下打开cmd xff0c 使用命令 flask sqlacodegen 34 mysql 43 pymysql username password 64 127 0 0 1 db name 34 tables table nam
  • 记录一下在AWS Elastic Beanstalk部署网站的诡异错误

    在AWS Elastic Beanstalk的UAT环境和PROD环境部署时 xff0c 发现数据库相关的处理代码在UAT环境不需要转换成SQL的text对象格式 xff0c 且在执行insert相关语句后不需要commit 就可以执行 x
  • 使用RaiDrive将NAS中的磁盘映射为本地磁盘

    使用RaiDrive将NAS中的磁盘映射为本地磁盘 RaiDrive是用来将网盘映射为本地磁盘的工具 xff0c 本地化 可以使用OneDrive xff0c Google Drive还有Dropbox网盘 xff0c 进行映射 也可以将N
  • ARM立即数的构成和有效立即数的判断

    首先要知道什么是立即数 xff0c 立即数如何构造 xff0c 以及怎样判断一个数是不是有效立即数 ARM立即数 arm指令32位的构成 xff1a D31 D12 20bit 指令编码部分 xff09 D11 D0 12bit 立即数部分
  • QT 设置QPushButton 颜色

    调色板类QPalette QPalette类包含了 Qt窗口不见的颜色组 collor group 1 Active组 该组的颜色用户当前活动的 active 窗口 即具有键盘或鼠标焦点的窗口 2 Inactive组 该组用语其他的窗口 3
  • Python文本任务多进程PyQt5图形化控制

    Python文本任务多进程PyQt5图形化控制 前言一 PyQt5 GUI1 使用Qt Designer2 代码与界面分离 二 多进程执行任务1 多线程与多进程2 多进程实现方式 三 双向通信完成图形化控制1 进程共享变量2 传入子进程3
  • 阿里云个人账户如何变更为企业用户

    有的朋友在注册阿里云账号的时候 xff0c 前期用的是个人实名认证 xff0c 注册的个人账户 xff0c 后来发现阿里云的各种促销活动中针对企业用户的优惠福利更大 xff0c 自己又不想从新注册账号 xff0c 想着直接将个人账户变更为企
  • Linux执行sudo命令提示用户名不在 sudoers 文件中

    Debian 11 安装完后 xff0c 通过终端执行 span style background color eeeeee span style color 000000 sudo span span 命令 xff0c 提示错误 xff1
  • 在Latex中引用章节,以章节名称显示,并设置引用跳转

    方法 xff1a 在需要引用的章节中加入对应的label标识 section span class token punctuation span Methodology span class token punctuation span l
  • 迷宫题解

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