一、 问题描述
二、算法思想
- 首先,确定方格中间下方人所在的位置,即(row, col) = (n//2, m//2)。
- 初始化路径和为0。
- 从初始位置开始,按照给定的5个方向进行移动:上(U),下(D),左(L),右(R),和原地不动(X)。
- 每次移动更新路径和:如果当前位置上有数字,则将该数字加到路径和上。
- 更新当前位置:根据给定的方向移动的规则,更新当前位置的行号和列号。
- 重复步骤3-5,直到当前位置移动到方格的边界。
- 返回路径和。
三、代码实现
#include<stdio.h>
int value = 0;
int t[6] = { 0 };
int a[6][7] = {{ 16, 4, 3, 12, 6, 0, 3 },{ 4, -5, 6, 7, 0, 0, 2 },{ 6, 0, -1, -2, 3, 6, 8 },{ 5, 3, 4, 0, 0, -2, 7 },{ -1, 7, 4, 0, 7, -5, 6 },{ 0, -1, 3, 4, 12, 4, 7 } };void f(int m, int n, int c, int e[])
{if (m < 0){if (c > value) { value = c;for (int i = 0; i < 6; ++i)t[i] = e[i];} return;}for (int i = n - 2; i <= n + 2; ++i){if (i >= 0 && i < 7){e[m] = a[m][i]; f(m - 1, i, c + a[m][i], e);}}
}
void main()
{int e[6] = { 0 };f(5, 3, 0, e);printf("%d\n",value);}
执行结果
结语
每天告诉自己一次
我真的很不错
!!!