只改动一个地方就AC了,为什么
查看原帖
只改动一个地方就AC了,为什么
421781
liuzimingc楼主2021/1/21 19:32

rt,这是我之前的代码(4848 分)

#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>9k > 9 就可以了?毕竟填第 1010 个数的时候就可以直接 return; 了啊

2021/1/21 19:32
加载中...