徐振轩2011 @ 2024-09-15 13:42:56
#include <bits/stdc++.h>
using namespace std;
int t,n,m,ans;
int a[10][10],vis[10][10],vas[10][10];
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,-1,1};
bool check1 (int x,int y){
return (x < 1 || x > n || y < 1 || y > m || vis[x][y]);
}
bool check2 (int x,int y){
for (int i = x - 1 ; i <= x + 1 ; i++)
for (int j = y - 1 ; j <= y + 1 ; j++)
if (vas[i][j])
return 0;
return 1;
}
void dfs (int x,int y,int sum){
printf ("%d %d\n",x,y);
if (check1(x,y)){
ans = max(ans,sum);
return;
}
for (int i = 0 ; i < 4 ; i++){
int nx = x + dx[i],ny = y + dy[i];
if (!vis[nx][ny]){
vis[nx][ny] = 1;
if (check2(x,y)){
vas[nx][ny] = 1;
dfs(nx,ny,sum + a[nx][ny]);
vas[nx][ny] = 0;
}
dfs(nx,ny,sum);
vis[nx][ny] = 0;
}
}
}
int main(){
cin >> t;
while (t--){
cin >> n >> m;
ans = 0;
for (int i = 1 ; i <= n ; i++)
for (int j = 1 ; j <= m ; j++)
cin >> a[i][j];
dfs(n / 2,m / 2,0);
cout << ans << '\n';
}
return 0;
}