编辑代码

#include <stdio.h>
#include <stdlib.h>

// 定义木板的大小
#define N 4
#define M 5

// 定义硬币分布
int board[N][M] = {
    {0, 1, 0, 2, 0},
    {1, 0, 1, 0, 3},
    {0, 2, 0, 4, 0},
    {3, 0, 2, 0, 1}
};

// 定义二维数组用于存储最大硬币数目
int maxCoins[N][M];

// 计算机器人能找到的最大硬币数
int findMaxCoins() {
    // 初始化第一行和第一列
    maxCoins[0][0] = board[0][0];
    for (int i = 1; i < N; i++) {
        maxCoins[i][0] = maxCoins[i - 1][0] + board[i][0];
    }
    for (int j = 1; j < M; j++) {
        maxCoins[0][j] = maxCoins[0][j - 1] + board[0][j];
    }

    // 动态规划,计算每个位置的最大硬币数
    for (int i = 1; i < N; i++) {
        for (int j = 1; j < M; j++) {
            maxCoins[i][j] = board[i][j] + ((maxCoins[i - 1][j] > maxCoins[i][j - 1]) ? maxCoins[i - 1][j] : maxCoins[i][j - 1]);
        }
    }

    // 返回右下角位置的最大硬币数
    return maxCoins[N - 1][M - 1];
}

// 输出机器人路径
void printRobotPath() {
    printf("Robot Path:\n");
    int i = N - 1, j = M - 1;

    while (i > 0 || j > 0) {
        printf("(%d, %d) -> ", i, j);
        if (i > 0 && j > 0) {
            if (maxCoins[i - 1][j] > maxCoins[i][j - 1]) {
                i--;
            } else {
                j--;
            }
        } else if (i > 0) {
            i--;
        } else {
            j--;
        }
    }

    printf("(0, 0)\n");
}

int main() {
    int maxCoinsFound = findMaxCoins();
    printf("Maximum Coins Collected: %d\n", maxCoinsFound);

    printRobotPath();

    return 0;
}