P2040 打开所有的灯
#include<bits/stdc++.h>
using namespace std;
long long a[5][5],minn = LONG_LONG_MAX,idx = 10;
bool flag;
const int n = 3;
int f(int a){
if(a)return 0;
return 1;
}
void dfs(long long step){
if(a[1][1] + a[1][2] + a[1][3] + a[2][1] + a[2][2] + a[2][3] + a[3][1] + a[3][2] + a[3][3] == 9){
minn = min(minn,step - 1);
idx = max(step - 1,idx);
return ;
}
if(step >= idx)return ;
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= n;j ++){
a[i][j] = f(a[i][j]);
a[i + 1][j] = f(a[i + 1][j]);
a[i - 1][j] = f(a[i - 1][j]);
a[i][j + 1] = f(a[i][j + 1]);
a[i][j - 1] = f(a[i][j - 1]);
dfs(step + 1);
a[i][j] = f(a[i][j]);
a[i + 1][j] = f(a[i + 1][j]);
a[i - 1][j] = f(a[i - 1][j]);
a[i][j + 1] = f(a[i][j + 1]);
a[i][j - 1] = f(a[i][j - 1]);
}
}
}
int main(){
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= n;j ++)
cin >> a[i][j];
dfs(1);
cout << minn;
return 0;
}