1042.电子老鼠闯迷宫
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
有一只电子老鼠被困在如下图所示的迷宫中。这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路。电子老鼠可以在路上向上、下、左、右行走,每一步走一个格子。现给定一个起点S和一个终点T,求出电子老鼠最少要几步从起点走到终点。(题意中迷宫左上角为[1, 1])
输入
本题包含一个测例。在测例的第一行有四个由空格分隔的整数,分别表示起点的坐标S(x.y)和终点的坐标T(x,y)。
从第二行开始的12行中,每行有12个字符,描述迷宫的情况,其中'X'表示建筑物,'.'表示路.
输出
输出一个整数,即电子老鼠走出迷宫至少需要的步数。
第二版代码(模块性更强、更简洁):
#include <iostream>
#include <queue>
using namespace std;
int sx,sy;
int tx,ty;
char maze[12][12]; //代码中迷宫从[0,0]开始
int used[12][12]; //判重数组:本格是否已经来过
int step[12][12]; //步数数组:到达本格需要几步
int walk[4][2]= //横纵坐标变化
{
0, -1, //左
+1, 0, //下
0, +1, //右
-1, 0 //上
};
struct node
{
int mx; //老鼠当前所在位置
int my;
};
node start,target;
queue <node> q1;
void input();
void init();
int bfs();
node moveto(node now, int i); //返回移动后的新节点
bool isTarget(node now, node next); //判断next节点是否有效,是否到达目标节点
int main()
{
input(); //输入数据
init(); //初始化
cout<<bfs()<<endl; //输出数据
return 0;
}
void input()
{
cin>>sx>>sy>>tx>>ty;
cin.get(); //吃第一行剩下的回车
for(int i=0; i<12; i++)
{
for(int j=0; j<12; j++)
{
maze[i][j]=cin.get();
}
cin.get(); //吃每一行剩下的回车
}
}
void init()
{
for(int i&#