rt,这是我之前的代码(48 分)
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
#define maxn 5
#define ll long long
int a[maxn][maxn],ans=1e9;
bool check(){
for (int i=1;i<=3;i++) for (int j=1;j<=3;j++) if (!a[i][j]) return 0;
return 1;
}
void mov(int row,int col){
a[row+1][col]=1-a[row+1][col];a[row-1][col]=1-a[row-1][col];
a[row][col+1]=1-a[row][col+1];a[row][col-1]=1-a[row][col-1];
a[row][col]=1-a[row][col];
}
void dfs(int k,int foot){
if (k>9/*这里*/) return;
if (check()){
ans=min(ans,foot);
return;
}
int row=(k-1)/3+1,col=(k-1)%3+1;
dfs(k+1,foot);
mov(row,col);
dfs(k+1,foot+1);
mov(row,col);
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
for (int i=1;i<=3;i++) for (int j=1;j<=3;j++) cin>>a[i][j];
dfs(1,0);
cout<<ans;
return 0;
}
后面调了很久,最后把 k>9 调成了 k>10,就AC了……不是按理来说 k>9 就可以了?毕竟填第 10 个数的时候就可以直接 return; 了啊