比赛 20241024 评测结果 AAAAAAAAAA
题目名称 费解的开关 最终得分 100
用户昵称 健康铀 运行时间 2.021 s
代码语言 C++ 内存使用 3.57 MiB
提交时间 2024-10-24 08:21:42
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=6;
const int dx[N]={0,0,0,0,-1,1};
const int dy[N]={0,0,1,-1,0,0};
int T,a[N][N];
char ch;
int check(){
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			if(a[i][j]==0)return i;
		}
	}
	return 6;
}
int ans=0x3f3f3f3f;
void change(int x,int y){
	for(int i=1;i<=5;i++){
		int nx=x+dx[i],ny=y+dy[i];
		a[nx][ny]^=1;
	}
}
void dfs(int dep){
	if(dep>7)return;
	int x=check(),y;
	if(x==6){
		ans=min(ans,dep);
		return;
	}
	for(int j=1;j<=5;j++){
		if(a[x][j]==0){
			y=j;
			break;
		}
	}
	for(int i=1,nx,ny;i<=5;i++){
		nx=x+dx[i];
		ny=y+dy[i];
		if(nx<1||nx>5||ny<1||ny>5)continue;
		change(nx,ny);
		dfs(dep+1);
		change(nx,ny);
	}
}
void solve(){
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			cin>>ch;
			if(ch=='0')a[i][j]=0;
			else a[i][j]=1;
		}
	}
	ans=0x3f3f3f3f;
	dfs(1);
	if(ans==0x3f3f3f3f)printf("-1\n");
	else printf("%d\n",ans-1);
}
int main(){
	freopen("switch.in","r",stdin);
	freopen("switch.out","w",stdout); 
	scanf("%d",&T);
	while(T--)solve();
	return 0;
}