【NOJ1042】【算法实验三】【BFS_分支限界】电子老鼠走迷宫

博客讲述了如何使用BFS解决电子老鼠走迷宫问题,包括起点和终点坐标,迷宫描述,以及优化后的代码实现,强调了代码的模块化和简洁性。
摘要由CSDN通过智能技术生成

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&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值