我废了

P1219 [USACO1.5] 八皇后 Checker Challenge

lucy2012 @ 2024-05-02 21:19:12

这题我做第三次,次次有不明白的地方,这次:

a[x]=i;这个很重要!x和i从1开始计,为什么第一个会输出2?

附赠代码:

#include<bits/stdc++.h>
using namespace std;
int n,sum=0,d1[110],d2[110],d3[30],a[30];
void dfs(int x){
    if(x>n){
        sum++;
        if(sum<=3){
            for(int i=1;i<=n;i++)
                cout<<a[i]<<' ';
            cout<<endl;
        }
        return; 
    }
    for(int i=1;i<=n;i++){
        if(d3[i]==0&&d1[x+i]==0&&d2[x-i+15]==0){
            a[x]=i;
            d3[i]=1;d1[x+i]=1;d2[x-i+15]=1;
            dfs(x+1);
            d3[i]=0;d1[x+i]=0;d2[x-i+15]=0;
        }
    }
}
int main() {
    cin>>n;
    dfs(1);
    cout<<sum;
    return 0;
}

by lucy2012 @ 2024-05-02 21:39:08

@hhhcj 问一句,如果不合法会退出函数还是怎么,我手动模拟就卡这了QwQ


by __hjwucj__ @ 2024-05-02 21:40:09

@lucy2012 不合法继续寻找下一个方案


by __hjwucj__ @ 2024-05-02 21:41:24

@lucy2012 说实话,我很无语,快被搞疯了!!!QwQ+QAQ


by I_Love_DS @ 2024-05-02 21:41:42

不行复习回溯吧。

回溯思想:如果判断出当前状态不可行,就回到上一个状态继续搜索。

当然,枝过多会导致 TLE 的亲切问候,所以又有了剪枝:在不可能有最优解的情况下退出。


by lucy2012 @ 2024-05-02 21:41:57

@hhhcj 从1开始?


by lucy2012 @ 2024-05-02 21:42:52

@hhhcj 抱歉(本人太蒻了


by lucy2012 @ 2024-05-02 21:43:19

@liuruiqing


by I_Love_DS @ 2024-05-02 21:43:27

@lucy2012 对应该是,如果你是一个正常人


by lucy2012 @ 2024-05-02 21:45:22

@liuruiqing 我问的自己都快疯了,我反正觉得自己不正常


by I_Love_DS @ 2024-05-02 21:46:25

我也有些不正常了


上一页 | 下一页