首页 > 其他分享 >迷宫

迷宫

时间:2024-07-23 19:51:56浏览次数:7  
标签:int sum 机器人 迷宫 long jqr

第3题     迷宫 查看测评数据信息

给一个n×m矩阵迷官c[n][m],第i行第j列的值为c[i][j],机器人jqr在迷宫中迷路了需要帮助。机器人jqr当前在(1,1)的位置,出口在(n,m),这个迷言有一个计数器,只有当计数器的值模(p-1)的余数为0时迷宫出口才会开门(出口没有开门意味着即使在(n,m)的位置也不能逃出去)。机器人jqr每一秒会向迷言的上下左右四个方向走一步(不可以不走),并且不能走出迷言的边界,假设机器人jqr从(x,y)走到了(p,q),然后计数器将会加上c[p][q],特别的,计数器初始是c[1][1]。

现在有两个二维数组a[n][m]和b[n][m]。其中image.png。问机器人jqr最快多久可以走出迷宫。

输入格式

 

第一行三个整数n,m,p(1<=n,m<=10,2<=p<=1e4)

接下来n行m列,表示a[i][j]

接下来n行m列表示b[i][j]

其中0<=a[i][j],b[i][j]<=1e6

 

输出格式

 

一个整数,表示最少需要的步数,如果不可能走出迷宫,输出-1

 

输入/输出例子1

输入:

3 3 10

1 2 3

0 1 4

0 0 0

1 0 0

0 0 1

0 1 0

 

输出:

6

 

样例解释

 

image.png

 

 

bfs中,如果要连续到一个点多次,那么就记忆化,相当于dp了!

#include <bits/stdc++.h>
using namespace std;
const int N=15, M=1e4+5;

struct node
{
	int x, y;
	long long sum;
};
int dx[]={-1, 0, 0, 1}, dy[]={0, -1, 1, 0};
int n, m, p, vis[N][N];
long long a[N][N], b[N][N], c[N][N], f[N][N][M];
queue<node> q;
void bfs()
{
	memset(f, 63, sizeof f);
	f[1][1][a[1][1]]=0;
	
	q.push({1, 1, a[1][1]});
	while (!q.empty())
	{
		int x=q.front().x, y=q.front().y;
		long long sum=q.front().sum;
		q.pop();
		
		for (int i=0; i<4; i++)
		{
			int nx=x+dx[i], ny=y+dy[i];
			if (nx>=1 && nx<=n && ny>=1 && ny<=m)
			{
				int tmp=(sum+a[nx][ny])%(p-1);
				if (f[nx][ny][tmp]>f[x][y][sum]+1)
				{
					f[nx][ny][tmp]=f[x][y][sum]+1;
					q.push({nx, ny, tmp});
				}
			}
		}
	}
}
int main()
{
	scanf("%d%d%d", &n, &m, &p);
	
	for (int i=1; i<=n; i++)
		for (int j=1; j<=m; j++)
			scanf("%lld", &a[i][j]);
	
	for (int i=1; i<=n; i++)
		for (int j=1; j<=m; j++)
			scanf("%lld", &b[i][j]);
	
	for (int i=1; i<=n; i++)
		for (int j=1; j<=m; j++)
			c[i][j]=a[i][j]%(p-1);
	
	bfs();
	
	if (f[n][m][0]==f[0][0][0]) printf("-1");
	else printf("%lld", f[n][m][0]);
	return 0;
}

  

标签:int,sum,机器人,迷宫,long,jqr
From: https://www.cnblogs.com/didiao233/p/18319455

相关文章

  • [SDOI2012] 走迷宫 题解
    [SDOI2012]走迷宫题目描述Morenan被困在了一个迷宫里。迷宫可以视为\(n\)个点\(m\)条边的有向图,其中Morenan处于起点\(s\),迷宫的终点设为\(t\)。可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点。这样,Morenan走的步数可能......
  • 迷宫守卫 题解
    给个题目链接:迷宫守卫。下面直接开始讲了。发现一个事情,省选的题已经不怎么考板子难度很高的题了,现在考的都是思维难度非常高的题。首先,我们考虑字典序的性质,如果第一位劣,那么后面无论多优都没用,所以我们要优先满足靠前的位置。于是我们考虑使用二分来找出第一个数,后面以此类......
  • D-走一个大整数迷宫(牛客月赛97)
    题意:给两个n行m列的矩阵a和b,计数器,只有当计数器的值模(p-1)时出口才打开,要从左上走到右下,求最快多久走出迷宫。分析:无论2的bij次方有多大p的2的bij次方的次方取模(p-1)都为1,所以cij=aij。用bfs搜索最短路径代码:#include<bits/stdc++.h>usingnamespacestd;structA{   i......
  • 题解 - 幻象迷宫
    题目in洛谷或题目inCF题目幻象迷宫可以认为是无限大的,不过它由若干个\(N\timesM\)的矩阵重复组成。矩阵中有的地方是道路,用\(\verb!.!\)表示;有的地方是墙,用\(\verb!#!\)表示。起始位置用\(\verb!S!\)表示。也就是对于迷宫中的一个点\((x,y)\),如果\((x\bmodn,y......
  • 穿梭在Yarn的代理配置迷宫:全面指南
    ......
  • UE4 C++ 随机生成迷宫地图
    参考参考原理就是利用一个房间的三个方向(排除进入口)出口(可以减少,即设置墙壁),从而获得下一次房间生成的位置,其中涉及到对于多个房间重叠,生成结束后如何对缺口进行修补等功能实现RoomBaseActor该Actor类是后续创建房间的基类,如果想要固定所有房间形状即只改变出口个数,那么在该类......
  • P1605 迷宫
    #include<bits/stdc++.h>usingnamespacestd;intq[101][101];intsum=0;inti,j,n,m,t,sx,sy,x,y,ex,ey;voiddfs(inta,intb){  if(a==ex&&b==ey)  {    sum++;    return;  }  else  {      q[a][b]=0; ......
  • 迷宫Ⅱ
    题目描述一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n 的格点组成,每个格点只有 22 种状态:. 和 #,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从......
  • python 趣味习题_递归函数(炸弹迷宫的走法)
    @[toc]python学习中,常会遇到一些百思不得其解的难题,但有时“灵光一现”找准方法,难题便会迎刃而解。本专栏旨在记录本人解决问题的思考方法,及实现过程。有更好方法或对程序执行有疑问的伙伴,可在评论区留言,共同讨论。题目要求题目描述:在一串连续的迷宫(房间编号为1-11的......
  • 递归算法:代码迷宫中的无限探索
    ✨✨✨学习的道路很枯燥,希望我们能并肩走下来!目录前言一深入理解递归二迭代VS递归三递归算法题目解析3.1汉诺塔问题 3.2合并两个有序链表3.3反转链表 3.4 两两交换链表中的节点 3.5Pow(x,n)(快速幂) ​四总结总结前言作为递归、搜索与回溯算法......