-TUT- 2025-09-09 10:57 采纳率: 100%
浏览 13
已结题

为什么明明输入和输出都是对的,但是就是过不了啊


#include<iostream>
using namespace std;

int main() {
    int a, b, x, y, h;
    h = 0;
    cin >> a >> b >> x >> y;
    int dt[21][21] = {0};
    bool jd[21][21] = { true };

    for (int i = 0; i < 21; ++i) {
        for (int j = 0; j < 21; ++j) {
            jd[i][j] = true;
        }
    }
    jd[x][y] = false;
    int mdhd[8][2] = {
        {2,1},{2,-1},
        {1,2},{1,-2},
        {-1,2},{-1,-2},
        {-2,1},{-2,-1}
    };
    for (int i = 0; i < 8; ++i) {
        int nx, ny;
        nx = mdhd[i][0] + x;
        ny = mdhd[i][1] + y;
        if (nx >= 0 && nx <= a && ny >= 0 && ny <= b) {
            jd[nx][ny] = false;
        }
    }
    if (jd[0][0]) {
        dt[0][0] = 1;
    }
    for (int j = 1; j <= b; ++j) {
        if (jd[0][j]) {
            dt[0][j] = dt[0][j - 1];
        }
    }
    for (int i = 1; i <= a; ++i) {
        if (jd[i][0]) {
            dt[i][0] = dt[i - 1][0];
        }
    }
    for (int i = 1; i <= a; ++i) {
        for (int j = 1; j <= b; ++j) {
            if (jd[i][j]) {
                dt[i][j] = dt[i][j - 1] + dt[i - 1][j];
            }
        }
    }
    cout << dt[a][b] << endl;
    /*
    for (int i = 0; i < 21; ++i) {
        for (int j = 0; j < 21; ++j) {
            cout << dt[i][j] << ' ';
        }
        cout << endl;
    }*/
    return 0;
}


img

  • 写回答

6条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2025-09-09 11:20
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这段代码是一个解决棋盘上马的移动问题的程序,具体问题为:在一个给定大小为a×b的棋盘上,有一个马,初始位置为(x, y),要求计算马从起始位置(x, y)移动到棋盘右下角(a, b)共有多少种不同的路径。 首先,代码定义了一个二维数组dt[21][21]用来记录从起始位置到当前位置(i, j)的路径数。另外,定义了一个二维数组jd[21][21]用来标记棋盘上每个位置是否可以到达。 然后,代码利用马的移动规则,遍历八个可能的移动方向,并更新可以到达的位置。接着,使用动态规划的方式计算从起始位置到终点的路径数。最后输出到达(a, b)位置的路径数。 下面是一个简单的示例,假设棋盘大小为5×5,马的初始位置为(0, 0),终点位置为(4, 4): 输入: 5 5 0 0 输出: 304 这个代码主要使用了动态规划的思想,根据已知位置的路径数来计算未知位置的路径数,最终得到到达目标位置的路径数。可以根据实际情况灵活应用。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 12月25日
  • 已采纳回答 12月17日
  • 创建了问题 9月9日