首页 > 其他分享 >洛谷P1605 迷宫

洛谷P1605 迷宫

时间:2024-08-24 13:51:01浏览次数:12  
标签:遍历 洛谷 int 迷宫 yy xx 坐标 P1605 起点

原题

题目描述

给定一个 $ N \times M $ 方格的迷宫,迷宫里有 $T$ 处障碍,障碍处不可通过。

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

给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。

输入格式

第一行为三个正整数 $N,M,T$,分别表示迷宫的长宽和障碍总数。

第二行为四个正整数 $SX,SY,FX,FY$$SX,SY$ 代表起点坐标,$FX,FY$ 代表终点坐标。

接下来 $T$ 行,每行两个正整数,表示障碍点的坐标。

输出格式

输出从起点坐标到终点坐标的方案总数。

样例 #1

样例输入 #1
2 2 1
1 1 2 2
1 2
样例输出 #1
1

提示

对于 $100\%$ 的数据,$1 \le N,M \le 5$$1 \le T \le 10$$1 \le SX,FX \le n$$1 \le SY,FY \le m$

题目大意

绕过障碍从 $(sx,sy)$ 走到 $(fx,fy)$ 的方案数。

思路

求方案数需要遍历每一条线路,而且可能有一些路会重复走同一个点,所以需要用深搜来实现。

我们用 $v$ 数组来表示当前点有无被遍历,$a$ 数组表示有无障碍,从起点上下左右方向移动,能到终点的路线算一个方案,方案数加一,同时回溯遍历下一条路。

代码实现

#include<bits/stdc++.h>
using namespace std;
const int N=20;//常量边界 
int a[N][N],v[N][N];
int n,m,t,ans;
int sx,sy,ex,ey;//sx,sy表起点,ex,ey表终点 
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};//方向
void dfs(int x,int y)//深搜 
{
	if(x==ex && y==ey)//到达终点 
	{
		ans++;//小小累加一下方案数 
		return ;
	}
	for(int i=0;i<4;i++)//四个方向都遍历一遍 
	{
		int xx=x+dx[i],yy=y+dy[i];
		if(xx<=n && xx>=1 && yy<=m && yy>=1 && v[xx][yy]==0 && a[xx][yy]==0)
		{//判断xx和yy有没有越界,v[xx][yy]当前位置有没有被遍历过,a[xx][yy]当前位置是不是障碍
			v[xx][yy]=1;//标记,表示遍历过
			dfs(xx,yy);//从当前位置递归 
			v[xx][yy]=0;//回溯,为下一个方案做准备 
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&t);//小小的读入 
	scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
	v[sx][sy]=1;//标记起点被遍历过 
	for(int i=1;i<=t;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);//读入障碍 
		a[x][y]=1;//标记障碍 
	}
	dfs(sx,sy);//从起点开始遍历(不能从(1,1)开始) 
	printf("%d",ans);//输出,忘了会 WA 声一片 
	return 0;//好孩几的大好习惯 
}

橙题还是挺简单的(求赞)

标签:遍历,洛谷,int,迷宫,yy,xx,坐标,P1605,起点
From: https://blog.csdn.net/caizihao004/article/details/141498388

相关文章

  • 将洛谷私信接入Windows
    首先下载一个私信Github:https://github.com/GCSG01/LG_Show_Massger/archive/refs/heads/main.zip然后解压,找到src/settings.json,把你的洛谷cookie和UID填进去,点击Start.cmd运行。(其余的不要改)之后不出意外就会有两个窗口:AI功能:下载仓库:https://github.com/OI-liyi......
  • 洛谷P10878 [JRKSJ R9] 在相思树下 III && 单调队列
    传送门:P10878[JRKSJR9]在相思树下III将军啊,早卸甲,他还在廿二,等你回家……一道练习单调队列的好题qwq题目意思:很明白了,不再复述。(注意$\foralli$表示对于任意的i,可理解为所有)思路:贪心是很明显的,因为我们要让最后的值最大,首先要把小的值删掉。最后的答案就是进......
  • 洛谷P1182 数列分段 Section II
    传送门:P1182数列分段SectionII消灭人类暴政,世界属于三体题目意思:题目说的很明白了思路:考虑部分分:20%的数据保证n<10,直接爆搜;40%的数据保证n<1000,n^2+前缀和搞定100%的数据:求每段最大和的最小值:明显的二分(n在10^5的范围也说明了这一点,因为二分查找的......
  • 洛谷P1540 [NOIP2010 提高组] 机器翻译答案
    #include<bits/stdc++.h>usingnamespacestd;/*数据结构:队列queue 桶:标记某个单词是否出现在内存中 t[i]=false:不在t[i]=true:在对于读入的每个单词x: 如果不存在单词x 存储(入队) t[x]=true 内存中元素个数(q.size())>M: t[q.front()]=falses; ......
  • 洛谷 P2590 [ZJOI2008] 树的统计 题解
    题目大意给你一个\(N\),然后再给你两个长度为\(N\)的序列。让你构造一个仅有\(0\)和\(1\)的\(N\timesN\)的正方形,但是要满足两个序列的顺序:第一个序列指的是该正方形每一行所构成的二进制数的大小顺序。第二个序列指的是该正方形每一列所构成的二进制数的大小顺序。......
  • 洛谷P3528 [POI2011] PAT-Sticks && 数据结构之堆
    传送门:P3528[POI2011]PAT-Sticks与买桂花同载酒,终不似,少年游这是现在为止洛谷上的最优解!!翻译题目描述小约翰尼的爷爷奶奶送给他一份生日礼物。这份礼物是一盒长度和颜色各异的木棍。约翰尼想知道,在他得到的这组木棍中,是否存在三根木棍能够组成一个三边颜色各不相同的三......
  • 汇编语言之门:深入I/O操作的迷宫
    标题:汇编语言之门:深入I/O操作的迷宫在计算机的微观世界中,汇编语言以其与硬件的紧密联系而著称。输入输出(I/O)操作是汇编语言程序中与外部世界交互的重要手段。本文将带你深入探索汇编语言中的I/O操作,揭示其背后的原理,并展示如何通过代码实现基本的I/O功能。汇编语言与I/O操......
  • 汇编语言之门:深入I/O操作的迷宫
    标题:汇编语言之门:深入I/O操作的迷宫在计算机的微观世界中,汇编语言以其与硬件的紧密联系而著称。输入输出(I/O)操作是汇编语言程序中与外部世界交互的重要手段。本文将带你深入探索汇编语言中的I/O操作,揭示其背后的原理,并展示如何通过代码实现基本的I/O功能。汇编语言与I/O操......
  • 【LGR-196-Div.4】洛谷入门赛 #26 题A - H 详细题解--优化思路简洁代码(C++,Python语
    前言:    觉得这个比赛很有意思的,都是暴力题,涉及一些细节,难度比较适合刚学编程语言的,可以很好的锻炼基础还有手速,最后两题也是比较有意思,之后也准备更新atc的比赛题解和洛谷的一些高质量比赛题解(算法网瘾就是想参加各种比赛)   如果觉得有帮助,或者觉得我写的好,......
  • 洛谷 P5731 蛇形方阵
    目录题目-蛇形方阵题目描述输入格式输出格式样例样例输入#1样例输出#1提示ACCODE思路ACCODE题目-蛇形方阵题目描述给出一个不大于9的正整数n,输出n×n的蛇形方阵。从左上角填上1开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用3个字符,前面......