迷宫问题(2) 解题报告

2023-05-16

迷宫问题

【问题描述】

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

【输入文件】

第一行N、M和T,N为行,M为列,T为障碍总数。

第二行起点坐标SX,SY,终点坐标FX,FY。

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

【输出文件】

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

【样例输入】

2 2 1

1 1 2 2

1 2

【样例输出】

1

【数据规模】

1<=N,M<=5

【数据分析】

时间与空间复杂度朴素的搜索都可以接受。。

【解题思路】

又是一个标准的搜索,,DFS BFS都能做,,因为是求最短路我比较倾向于BFS,时间会更优。

然后还有一个关键点:起点上没有障碍不代表重点是没有障碍!!其实读入的时候只要障碍的坐标有终点那么直接输出-1就行了。。。如果不这样做的话也未尝不可,中间搜索其实也可以判断好这种情况,,然而我不知道为什么我竟然把判断卡在了外面(⊙o⊙)…,,WA掉真是活该。。。

下面是改过的程序。。。

【代码】

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sx[4]={1,-1,0,0};
int sy[4]={0,0,1,-1};
int queue[100][4],a[100][100];
int n,m,t,x1,y1,x2,y2,i,x,y,head,tail;

int main()
{
	freopen("maze.in","r",stdin);
	freopen("maze.out","w",stdout);
	scanf("%d%d%d",&n,&m,&t);
	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
	for (i=1;i<=t;++i)
	{
		scanf("%d%d",&x,&y);
		a[x][y]=1;
	}
	head=0;
	tail=1;
	queue[tail][1]=x1;//queue[i][1]表示横坐标,queue[i][2]表示纵坐标,queue[i][3]表示从起点到达(queue[i][1]
	queue[tail][2]=y1;//,queue[i][2])这个点的最少步数
	queue[tail][3]=1;//注意根据样例,起点的步数应该是1
	while (head<tail)
	{
		head++;
		for (i=0;i<4;++i)//向四个方向走
		{
			x=queue[head][1]+sx[i];
			y=queue[head][2]+sy[i];
			if (x>0&&y>0&&x<=n&&y<=m&&a[x][y]==0)
			{
				tail++;
				queue[tail][1]=x;
				queue[tail][2]=y;
				queue[tail][3]=queue[head][3]+1;
				a[x][y]=1;
				if (x==x2&&y==y2)//出事的地方!!我竟然把这个if放在了上一个if的外面。。。该打。。
		    	{
				printf("%d",queue[tail][3]);
				return 0;
	    		}
			}
		}
	}
	printf("-1");
	return 0;
}
【心得】

调试的时候想想极值和特殊值,,如果想到了就什么事也没有了,,,然后就是以后这种错误不能再犯了啊啊啊( ⊙ o ⊙ )啊!

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

迷宫问题(2) 解题报告 的相关文章

  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 61 1058 开始拿到这个题目的时候还纠结了半天 xff0c 英语很差的话这个题是不可能AC的 而我就是其中之一 Hum
  • [转载]最小矩形(rec1)的解题报告

    百度之星2009大赛的第二场有一道和此相关的题目 xff0c 如果看透这篇文章应该好写了 xff0c 不过可惜我事后才看到 xff0c 郁闷啊 xff01 xff01 还是要多看看书 原文 xff1a http www pmit com c
  • Leetcode Decode Ways 解题报告

    A message containing letters from A Z is being encoded to numbers using the following mapping 39 A 39 gt 1 39 B 39 gt 2
  • poj1287解题报告

    对于学过图和Prim算法的人来说 xff0c 此题是一道不折不扣的水题 xff0c 尤其是输入范围限定在了50之内 xff0c 所以即便我用了O xff08 n 3 xff09 的算法也只用了16MS就AC了 前期建图 xff0c 我用的是
  • poj1163解题报告

    经典的动态规划 xff0c 分析省略不懂的完全可以百度 数字三角形 xff0c 仅给出AC代码Memory 260k time 32ms include lt cstdio gt include lt cstring gt include
  • UVA10881解题报告

    还是那句话 xff0c 解题先看题 由题意知有一根长度为L的木棒 xff0c 木棒上面有n只蚂蚁 xff0c 每只蚂蚁或朝左或朝右且以每秒1cm的速度移动 xff0c 吗 xff0c 蚂蚁相撞后掉头 xff0c 问T秒后每只蚂蚁的状态 xf
  • UVA1592解题报告

    这道题让我费了我好几天的时间 xff0c 差不多打掉了我对算法的全部信心 不过 xff0c 幸好 xff0c 经过几天的努力我终于AC了这道题 xff0c 解开了我的一个大心结 下面我将列出三份代码 xff0c 其中后两份是WA代码用来给同
  • UVA1594解题报告

    这么垃圾的代码竟然没有超时 xff0c 我真不知道是该欢喜还是愁 AC代码 Time 0 11s include lt cstdio gt include lt cmath gt using namespace std const int
  • uva12100解题报告

    水题留念 一个队列模拟进出操作 xff0c 一个优先队列保存优先级 xff0c 模拟过程输出结果 Time 0ms include lt cstdio gt include lt queue gt include lt cstring gt
  • UVA232解题报告

    注意一个地方 xff0c 编号是从左到右 从上往下增大的 xff0c 所以我们可以从这里做文章按照编号大小的顺序遍历输出 实际上 xff0c 因为给出的数据范围很小我们的求解速度还是很快的 xff0c 尤其是横向输出时还可以做点小手脚加快运
  • UVA230解题报告

    这个题耗了我六天时间 xff0c 很打击我对算法的学习 xff0c 不过 xff0c 我终于解决了他 分析如下 仔细观察我们可以发现后面的操作与输出都是围绕标题 xff08 title xff09 展开的 xff0c 作者 xff08 au
  • UVA10562解题报告

    我的GitHub地址 xff1a https github com DongChengrong ACM Program 仔细观察他给出的树 xff0c 我们可以发现这棵多叉树长得比较有特点 最上是树根 xff0c 而每一个节点只要有孩子下面
  • UVA227解题报告

    因为网格中存在空格所以用gets录入 xff0c 首先录入一行数据 xff0c 如果第一个字符为 39 Z 39 则break退出循环 其次是对指令的接受与处理 接受指令可以用getchar xff0c 遇到换行符跳过 处理也很简单 xff
  • HDU - 3018解题报告

    题意简述 给出n个节点 xff0c m条边 xff0c 问要想全部经过这m条边且每个边只经过一次至少需要多少条路径 分析 这个题实际上就是一笔画问题中的定理二 xff1a 如果连通无向图 G 有 2k 个奇顶点 xff0c 那么它可以用 k
  • UVA818解题报告

    span class hljs comment UVA 818 理解了题意和水题差不多 条件 xff1a 一些可能相同的无向边 要求 xff1a 构建一个满足如下三个要求的图 一 不能有环 二 连成一条直线 三 所有节点要连在一起 操作 x
  • 迷宫问题(2) 解题报告

    迷宫问题 问题描述 给定一个N M方格的迷宫 xff0c 迷宫里有T处障碍 xff0c 障碍处不可通过 给定起点坐标和终点坐标 xff0c 问每个方格最多经过1次 xff0c 有多少种从起点坐标到终点坐标的方案 在迷宫中移动有上下左右四种方
  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 61 1058 开始拿到这个题目的时候还纠结了半天 xff0c 英语很差的话这个题是不可能AC的 而我就是其中之一 Hum
  • Print in Order 解题报告(C++)

    我们提供了一个类 xff1a public class Foo public void one print 34 one 34 public void two print 34 two 34 public void three print
  • Can you solve this equation?(二分)

    Problem Description Now given the equation 8 x 4 7 x 3 2 x 2 3 x 6 Y can you find its solution between 0 and 100 Now ple
  • 蓝桥杯 砝码称重 递归 解题报告

    5个砝码 用天平称重时 我们希望用尽可能少的砝码组合称出尽可能多的重量 如果只有5个砝码 重量分别是1 3 9 27 81 则它们可以组合称出1到121之间任意整数重量 砝码允许放在左右两个盘中 本题目要求编程实现 对用户给定的重量 给出砝

随机推荐