一、 問題描述
二、算法思想??
- 首先,確定方格中間下方人所在的位置,即(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);}
執行結果??
?結語?????
每天告訴自己一次
我真的很不錯
!!!