比赛 |
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;
}