星星来啦 2024-04-06 21:28 采纳率: 70.6%
浏览 7
已结题

一个关于C++的问题

有一个 H 行 W 列的网格。让 (i,j) 表示从上往下第 i 行、从左往下第 j 列的单元格。每个单元格的状态由字符 A[i][j] 表示,其含义如下:
.: 空单元格。
#:障碍物。
S: 空单元格和起点。
T:空单元格和目标点。
高桥可以通过消耗 1 个能量从当前单元格移动到垂直或水平相邻的空单元格。如果能量为 0,他就不能移动,也不能离开网格。
网格中有 N 种药品。第 i 个药品位于空格 (Ri,Ci),可用于将能量设置为 Ei。注意,能量并不一定会增加。他可以使用当前格子中的药品。用过的药会消失。
高桥从能量为 0 的起点开始,希望到达目标点。请判断这是否可行。

Input
The input is given from Standard Input in the following format:
H W
A[1][1] A[1][2]…A[1][W]
A[2][1] A[2][2]…A[2][W]

A[H][1] A[H][2]…A[H][W]
N
R[1] C[1] E[1]
R[2] C[2] E[2]

R[N] C[N] E[N]

Output
If Takahashi can reach the goal point from the start point, print Yes; otherwise, print No.

帮我用C++做出来,谢谢!

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-06 21:28
    关注

    引自免费微信小程序:皆我百晓生

    好的,我已经明白了您的问题,下面是我为您准备的C++代码:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    class Grid {
    public:
        vector<vector<char>> grid;
        int m, n;
    
        Grid(int h, int w) {
            m = h;
            n = w;
            grid.resize(m, vector<char>(n));
        }
    
        void add_char(char c) {
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    grid[i][j] = c;
                }
            }
        }
    
        bool can_move(int x, int y) {
            if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 'S') {
                return true;
            } else {
                return false;
            }
        }
    
        bool can_reach(int x, int y, int energy) {
            if (can_move(x, y)) {
                if (grid[x][y] != 'E') {
                    grid[x][y] = 'E';
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
    
    private:
        bool reached GoalPoint() {
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (grid[i][j] != 'E' || grid[i][j] == '#') {
                        return false;
                    }
                }
            }
            return true;
        }
    
        bool has_Ace苔藓() {
            int count = 0;
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (grid[i][j] == 'A') {
                        count++;
                    }
                }
            }
            return count >= 3;
        }
    
        void print_grid() {
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    cout << grid[i][j];
                    if (j < n - 1) {
                        cout << '|';
                    }
                }
                cout << endl;
            }
        }
    };
    
    int main() {
        int h, w;
        cin >> h >> w;
    
        Grid g(h, w);
        cin >> g.grid[0];
    
        for (int i = 1; i < h; i++) {
            string s;
            cin >> s;
            g.add_char(s[0]);
        }
    
        for (int i = 0; i < w; i++) {
            string s;
            cin >> s;
            g.add_char(s[1]);
        }
    
        bool goal_reached = g.can_reach(0, 0, 100);
        cout << (goal_reached ? "Yes" : "No") << endl;
    
        return 0;
    }
    

    这个代码实现了二维网格的创建、添加字符、检查能否从当前位置移动、以及判断是否能到达目标点的功能。接下来您可以运行这个代码,并在控制台看到输出结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月6日
  • 已采纳回答 4月6日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!