描述:
给一个20×20的迷宫、起点坐标和终点坐标,问从起点是否能到达终点。
输入:
多个测例。输入的第一行是一个整数n,表示测例的个数。接下来是n个测例,每个测例占21行,第一行四个整数x1,y1,x2,y2是起止点的位置(坐标从零开始),(x1,y1)是起点,(x2,y2)是终点。下面20行每行20个字符,’.’表示空格;’X’表示墙。
输出:
每个测例的输出占一行,输出Yes或No。
输入样例:
2
0 0 19 19
....................
XXXXXXXXXXXXXXXXXXXX
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
0 0 19 19
....................
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................
输出样例:
No
Yes
解题思路:是根据四个方向不断的找下去,直到找到或是全部找一遍为止。
代码如下:
-
#include<iostream>
-
#include<cstdio>
-
usingnamespacestd;
-
chardata[21][21];
-
intstate=0;
-
-
voidback(intx1,inty1,intx2,inty2)
-
{
-
intxShift[4]={0,0,-1,1},yShift[4]={1,-1,0,0};
-
if(x1==x2&&y1==y2)
-
{
-
state=1;
-
return;
-
}
-
data[x1][y1]='*';
-
for(inti=0;i<4;i++)
-
{
-
x1=x1+xShift[i];y1=y1+yShift[i];
-
if(data[x1][y1]=='.'&&y1>=0&&y1<20&&x1>=0&&x1<20)
-
{
-
if(x1==x2&&y1==y2)
-
{
-
state=1;
-
return;
-
}
-
back(x1,y1,x2,y2);
-
-
}
-
x1=x1-xShift[i];y1=y1-yShift[i];
-
}
-
}
-
intmain()
-
{
-
intn;
-
cin>>n;
-
while(n)
-
{
-
intx1,y1,x2,y2;
-
cin>>x1>>y1>>x2>>y2;
-
getchar();
-
for(inti=0;i<20;i++)
-
{
-
for(intj=0;j<20;j++)
-
scanf("%c",&data[i][j]);
-
getchar();
-
}
-
back(x1,y1,x2,y2);
-
if(state==1)
-
{
-
state=0;
-
cout<<"Yes"<<endl;
-
}
-
else
-
{
-
cout<<"No"<<endl;
-
}
-
n--;
-
}
-
return0;
- }
分享到:
相关推荐
该程序框图是迷宫问题求解的形象描述,通过该框图可以很好的了解上一篇源代码的内容
数据结构走迷宫算法,学习了他人的之后自己写的程序,运行OK
回溯法解迷宫问题.
这是大一下学期算法的期末作业,用C语言做了一个解迷宫问题的小动画,文件内附源码、开发文档、演示ppt和可执行文件,一看就会,而且充满趣味性,各位看官可以自己看一下,五分绝对物超所值
用回溯法完成迷宫问题,思路比较简单,有详细的注释
谭浩强的那本C语言程序设计的关于迷宫的非递归方法的实现,方便学习
该算法可以随机产生任意大小的迷宫,迷宫的大小由用户输入决定 回溯法解决迷宫是个经典算法,利用顺序栈来存储迷宫路线 如果能成功走出迷宫,可以画出迷宫轨迹
基于回溯法的罗密欧与朱丽叶的迷宫问题的Matlab实现.pdf
对于给定迷宫(n*n),和一个起始坐标和终点坐标,设计一个回溯算法,编程判断起点能否到达终点,若能打印出路径。 输入数据: 有文件input。txt给出数据。第一行有1个正整数n(表示迷宫大小),第二行为路径;‘x’...
用回溯法和栈实现迷宫程序,完美的C++程序,抱你满意,谢谢访问,您的满意,是我们永远追求的目标
迷宫的存储结构以二维数组来存储,用0,1表示通或不通。表面上似乎迷宫问题是一种特殊问题的解决方法,其实迷宫问题是一种特殊形式图的问题,因此,迷宫总量可...本文采用回溯法求解迷宫路径,算法用到数据结构中的栈。
迷宫问题。迷宫问题的求解是实验心理学中的一个经典问题,心理学家把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学...设计回溯算法实现如图所示的迷宫的求解。
数组maze[8][8]存储迷宫的信息,0代表可通过,-1代表是墙。 数组fx[4]fy[4]存储当处于(i,j)位置时可走的四个方向,...若有一个位置的四个方向,要么是墙,要么是走过的路,则置这个位置为-2,代表是死路,并回溯。
本程序 使用回溯法求解迷宫。 c# 语言wpf 开发,VS2010
VC++2012编程演练数据结构《8》回溯法解决迷宫问题
给出迷宫,求出所有路径. 通过递归实现。
数据结构课程设计java求解迷宫,回溯法,A算法.docx
迷宫-回溯法改进(优先级算法)