追风少年_9 2022-10-05 20:16 采纳率: 78.6%
浏览 10
已结题

P2802回家结果出错

问题遇到的现象和发生背景

洛谷P2802 回家
题目描述
小 H 在一个划分成了 n×m 个方格的长方形封锁线上。 每次他能向上下左右四个方向移动一格(当然小 H 不可以静止不动), 但不能离开封锁线,否则就被打死了。 刚开始时他有满血 6 点,每移动一格他要消耗 1 点血量。一旦小 H 的血量降到 0, 他将死去。 他可以沿路通过拾取鼠标来补满血量。只要他走到有鼠标的格子,他不需要任何时间即可拾取。格子上的鼠标可以瞬间补满,所以每次经过这个格子都有鼠标。就算到了某个有鼠标的格子才死去, 他也不能通过拾取鼠标补满 HP。 即使在家门口死去, 他也不能算完成任务回到家中。
地图上有五种格子:
0:障碍物。
1:空地, 小 H 可以自由行走。
2:小 H 出发点, 也是一片空地。
3:小 H 的家。
4:有鼠标在上面的空地。
小 H 能否安全回家?如果能, 最短需要多长时间呢?
输入格式
第一行两个整数 n,m, 表示地图的大小为 n×m 。
下面 n 行, 每行 m 个数字来描述地图。
输出格式
一行, 若小 H 不能回家, 输出 -1,否则输出他回家所需最短时间。
样例 #1
样例输入 #1

3 3
2 1 1
1 1 0
1 1 3

样例输出 #1

4

提示
对于所有数据,1≤n,m≤9。
2021.9.2 增添一组 hack 数据 by @囧仙

用代码块功能插入代码,请勿粘贴截图
#include<bits/stdc++.h>

using namespace std;

struct pl
{
    int kinds,hp,step;
    bool arrive;
};

int m,n,jx,jy;
pl num[11][11];

void search(int s)
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(num[i][j].hp>1)
            {
                if(num[i+1][j].hp>num[i][j].hp-1&&num[i+1][j].kinds!=0)
                {
                    if(num[i+1][j].kinds==4)
                        num[i+1][j].hp=6;
                    else
                        num[i+1][j].hp=num[i][j].hp-1;
                }
                if((num[i+1][j].step==-1||num[i+1][j].step>num[i][j].step+1)&&num[i+1][j].kinds!=0)
                {
                    num[i+1][j].step=num[i][j].step+1;
                    num[i+1][j].arrive=true;
                }
                if(num[i-1][j].hp>num[i][j].hp-1&&num[i-1][j].kinds!=0)
                {
                    if(num[i-1][j].kinds==4)
                        num[i-1][j].hp=6;
                    else
                        num[i-1][j].hp=num[i][j].hp-1;
                }
                if((num[i-1][j].step==-1||num[i-1][j].step>num[i][j].step+1)&&num[i-1][j].kinds!=0)
                {
                    num[i-1][j].step=num[i][j].step+1;
                    num[i-1][j].arrive=true;
                }
                if(num[i][j+1].hp>num[i][j].hp-1&&num[i][j+1].kinds!=0)
                {
                    if(num[i][j+1].kinds==4)
                        num[i][j+1].hp=6;
                    else
                        num[i][j+1].hp=num[i][j].hp-1;
                }
                if((num[i][j+1].step==-1||num[i][j+1].step>num[i][j].step+1)&&num[i][j+1].kinds!=0)
                {
                    num[i][j+1].step=num[i][j].step+1;
                    num[i][j+1].arrive=true;
                }
                if(num[i][j-1].hp>num[i][j].hp-1&&num[i][j-1].kinds!=0)
                {
                    if(num[i][j-1].kinds==4)
                        num[i][j-1].hp=6;
                    else
                        num[i][j-1].hp=num[i][j].hp-1;
                }
                if((num[i][j-1].step==-1||num[i][j-1].step>num[i][j].step+1)&&num[i][j-1].kinds!=0)
                {
                    num[i][j-1].step=num[i][j].step+1;
                    num[i][j-1].arrive=true;
                }
            }
        }
    }
    if(s=n*m*100)
        return;
    else
        search(s+1);
}

int main()
{
    for(int i=0;i<11;i++)
    {
        for(int j=0;j<11;j++)
        {
            num[i][j].arrive=false;
            num[i][j].hp=-1;
            num[i][j].kinds=0;
            num[i][j].step=-1;
        }
    }
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>num[i][j].kinds;
            if(num[i][j].kinds==2)
            {
                num[i][j].hp=6;
                num[i][j].step=0;
                num[i][j].arrive=true;
            }
            if(num[i][j].kinds==3)
            {
                jx=i;
                jy=j;
            }
        }
    }
    search(0);
    cout<<num[jx][jy].step;
}

运行结果及报错内容

一直是-1,我也是醉了。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月13日
    • 创建了问题 10月5日

    悬赏问题

    • ¥15 算法题:连接所以点,找两条无交叉,且长度最接近的线
    • ¥15 三分类机器学习模型可视化分析
    • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
    • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
    • ¥30 python,LLM 文本提炼
    • ¥15 关于将inet引入的相关问题
    • ¥15 关于一个倒计时的操作和显示设计
    • ¥15 提问STK的问题,哪位航天领域的同学会啊
    • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
    • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进