代码如下
#include <bits/stdc++.h>
using namespace std;
int t , n[25] , m[25] , a[11][11][25] , boolint[11][11][25] , ans[25];
int dx[9] = {0 , 0 , 1 , 1 , 1 , 0 , -1 , -1 , -1};
int dy[9] = {0 , 1 , 1 , 0 , -1 , -1 , -1 , 0 , 1};
void in()
{
scanf("%d" , &t);
for (int i = 1; i <= t; i++)
{
scanf("%d%d" , &n[i] , &m[i]);
for (int j = 1; j <= n[i]; j++)
for (int k = 1; k <= m[i]; k++)
scanf("%d" , &a[i][j][k]);
}
}
void out()
{
for (int i = 1; i <= t; i++)
printf("%d\n" , ans[i]);
}
void dfs(int w , int x , int y , int p)
{
if (x == n[w] && y == m[w])
if (boolint[w][x][y])
{
ans[w] = max (ans[w] , p);
return;
}
else
{
ans[w] = max(ans[w] , p + a[w][x][y]);
return;
}
else
{
if (boolint[w][x][y])
{
if (y == m[w]) dfs(w , x + 1 , 1 , p);
else dfs(w , x , y + 1 , p);
}
else
{
p += a[w][x][y];
for (int i = 0; i < 9; i++)
{
int xn = x + dx[i];
int yn = y + dy[i];
boolint[w][xn][yn] = 1;
}
if (y == m[w]) dfs(w , x + 1 , y , p);
else dfs(w , x , y + 1 , p);
}
}
}
int main()
{
in();
for (int i = 1; i <= t; i++)
dfs(i , 1 , 1 , 0);
out();
return 0;
}