求调!悬关
查看原帖
求调!悬关
973971
xfx2011楼主2025/1/25 17:00
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 10;
int a[maxn][maxn],b[maxn][maxn];
int vis[maxn][maxn];
int ans = 0x3f3f3f3f;
void check(int i,int j){
	// i - 1,j i,j - 1 i,j + 1 i + 1,j
	if(i - 1 >= 0 && j >= 0)
		a[i - 1][j] ^= 1;
	if(i >= 0 && j - 1 >= 0)
		a[i][j - 1] ^= 1;
	if(i >= 0 && j + 1 >= 0)
		a[i][j + 1] ^= 1;
	if(i + 1 >= 0 && j >= 0)
		a[i + 1][j] ^= 1;		
}
bool in(){
//	flag = 1;
	for(register int i = 0;i <= 4;i ++){
		for(register int j = 0;j <= 4;j ++){
			if(a[i][j] == 0){
//				flag = 0;
				return false;
			}
		}		
	}
	return true;
}
void dfs(int i,int j,int p){
	if(in() || p > 6){
		ans = min(ans,p);
		return ;
	}
	for(register int i = 0;i <= 4;i ++){
		for(register int j = 0;j <= 4;j ++){
			if(!vis[i][j]){
				check(i,j);
				dfs(i,j,p + 1);
				vis[i][j] = 0;
				check(i,j);			
			}

		}
	}
}
int main(){
	int t;
	cin >> t;
	while(t --){
		for(register int i = 0;i <= 4;i ++)
			for(register int j = 0;j <= 4;j ++)
				cin >> b[i][j],a[i][j] = b[i][j];
			ans = 0x3f3f3f3f;
		dfs(0,0,0);
		cout << ans << endl;
	}
	return 0;
}
2025/1/25 17:00
加载中...