题解
2024-08-06 22:29:07
发布于:上海
18阅读
0回复
0点赞
#include<iostream>
using namespace std;
int s=10;
bool puzzle[5][5],vis[5][5];
bool check(){
for(int i=1;i<=3;i++)for(int j=1;j<=3;j++)if(!puzzle[i][j])return 0;
return 1;
}
void turn(int x,int y){
puzzle[x][y]=!puzzle[x][y];
}
void change(int x,int y){
turn(x,y);
turn(x-1,y);
turn(x,y-1);
turn(x+1,y);
turn(x,y+1);
}
void dfs(int n=0){
if(n>=s)return;
if(check()){
s=min(s,n);
return;
}
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
if(!vis[i][j]){
change(i,j);
vis[i][j]=1;
dfs(n+1);
vis[i][j]=0;
change(i,j);
}
}
}
}
int main(){
for(int i=1;i<=3;i++)for(int j=1;j<=3;j++)cin>>puzzle[i][j];
dfs();
cout<<s<<endl;
return 0;
}
这里空空如也
有帮助,赞一个