P1123 求调
查看原帖
P1123 求调
1334925
徐振轩2011楼主2024/9/15 13:42
#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;
}
2024/9/15 13:42
加载中...