首页 > 其他分享 >洛谷P1605题解分析

洛谷P1605题解分析

时间:2022-11-09 16:34:52浏览次数:65  
标签:le 洛谷 int 题解 迷宫 坐标 dx dy P1605

迷宫

题目描述

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

输入格式

第一行为三个正整数 \(N,M,T\),分别表示迷宫的长宽和障碍总数。
第二行为四个正整数 \(SX,SY,FX,FY\),\(SX,SY\) 代表起点坐标,\(FX,FY\) 代表终点坐标。
接下来 \(T\) 行,每行两个正整数,表示障碍点的坐标。

输出格式

输出从起点坐标到终点坐标的方案总数。
对于 \(100\%\) 的数据,\(1 \le N,M \le 5\),\(1 \le T \le 10\),\(1 \le SX,FX \le n\),\(1 \le SY,FY \le m\)。

题目分析

  1. 打表:迷宫类题目定义dx,dy两个数组记录横纵坐标的变化,具体个数(四个or八个)视情况而定。
  2. 标记:主要标记迷宫边界已经经过的点特别注意深搜起点处打标记
  3. 题目保证起点无障碍,但未标注终点无障碍。

原代码

#include<bits/stdc++.h>
using namespace std;
int n,m,t,sx,sy,fx,fy,x,y,ans;
int dx[5]={0,0,1,0,-1},dy[5]={0,-1,0,1,0};		//打表
bool mapp[100][100];		//标记是否走过
void dfs(int a,int b){
	if(a==fx&&b==fy){		//目标状态
		ans++;		//记录答案
		return;
	}
	for(int i=1;i<=4;i++){
		if(!mapp[a+dx[i]][b+dy[i]]&&a+dx[i]<=n&&a+dx[i]>=1&&b+dy[i]<=m&&b+dy[i]>=1){
			mapp[a+dx[i]][b+dy[i]]=1;
			dfs(a+dx[i],b+dy[i]);
			mapp[a+dx[i]][b+dy[i]]=0;
		}
	}
}
int main(){
	memset(mapp,0,sizeof(mapp));
	scanf("%d %d %d",&n,&m,&t);
	for(int i=0;i<=n+1;i++)	mapp[0][i]=mapp[n+1][i]=1;
	for(int i=0;i<=m+1;i++)	mapp[i][0]=mapp[i][m+1]=1;
	scanf("%d %d",&sx,&sy);
	scanf("%d %d",&fx,&fy);
	for(int i=1;i<=t;i++){
		scanf("%d %d",&x,&y);
		mapp[x][y]=1;
	}
	mapp[sx][sy]=1;			//标记初始位置
	dfs(sx,sy);
	printf("%d",ans);
	return 0;
}

标签:le,洛谷,int,题解,迷宫,坐标,dx,dy,P1605
From: https://www.cnblogs.com/Nebulary/p/16874235.html

相关文章

  • CF1747 题解
    比赛链接:https://codeforces.com/contest/1747题解:AB水题//bySkyRainWind#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include......
  • P1688 新单词接龙问题 题解
    大家好,我喜欢Hash,所以我用Hash通过了这道题。思路:处理方法有点类似于P6521首先我们最终接出的字符串要求其中的小字符串按字典序排序,那么我们就将所有字符串排好序......
  • 问题解决-白鹭引擎Egret Wing3修改项目内容后进行调试,项目仍显示修改前样式
    问题描述:修改前: 修改后: 解决方法:点击上方菜单栏项目-清理,进行项目清理    点击菜单栏项目-调试  重新进行调试。  调试成功后,问题成功解......
  • 问题解决-白鹭引擎Egret Wing3调试出错,输出台显示乱码而且编译终止问题Failed to load
    问题描述:Failedtoloadresource:theserverrespondedwithastatusof404()未能加载资源:服务器响应,状态为404() 解决方法:卸载引擎并重新安装,安装时使用默认路径(C......
  • maven打包失败,Could not resolve dependencies for project...Could not find artifac
    一、问题原因:在阿里私服或者Maven的中央仓库找不到Pom文件引入的Jar,也就是说,你想引的依赖Jar包根本没有成功加载到项目中。二、分析2.1这个包可能处于隐患或者其他原因,原作......
  • CF1750题解
    A.IndirectSort首先,如果\(a_i>a_k\),\(a_i\)就会变大,而这样的操作是没有意义的.因此操作可以转换为\(\forallj,k(j<k)\),如果\(\existsi,i<j\),使得\(a[i]<=a[k]\),......
  • [CSP-S 2022]数据传输 题解
    提示:我这个方法比其它解法还要麻烦,目前最简洁的解法是dottle的解法,推荐阅读,我仅在此说明我的思路。给定\(n\)个点的树,点\(i\)的点权为\(a_i\),给定整数\(k\)。称......
  • 线上问题解决
    1.服务重启2.部署回滚3.限流降级利用日志和故障现场保留的dump文件等进行根因分析;修复故障后在测试环境进行验证,确认没问题后再发布到生产环境;记录故障从发生到彻底......
  • 洛谷 P1195.口袋的天空
    题目链接:https://www.luogu.com.cn/problem/P1195今天上算法设计课,复习一下Kruskal和并查集。 放AC代码1#include<bits/stdc++.h>2usingnamespacestd;3......
  • cannot resolve symbol 'String' 问题解决
    在拉取一个新的项目的时候,maven和jdk都是配置好的,没问题,但是String会报红,显示cannotresolvesymbol'String'。maven的setting文件需要更改内容,因公司有自己的特殊的依......