[N皇后]求救`(*>﹏<*)′WA两个

P1219 [USACO1.5] 八皇后 Checker Challenge

digua2010 @ 2024-02-24 20:18:28

#include <bits/stdc++.h>
using namespace std;

// 意如其名,f是棋盘,shu是竖,接下来是右边的斜,左边的斜,t判断是否输出三组数据 
bool f[15][15], shu[15], r_xie[20], l_xie[20], t = 0;
long long n, sum;

// 输出函数 
void print() {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (f[i][j]) cout << j + 1 << ' ';
        }
    }
    cout << "\n";
}

void dfs(int x) {
    // 如果到指定行就输出 
    if (x > n) {
        // 判断是否输出三组(要一直计数最后输出) 
        sum ++;
        if (sum > 3) {
            t = 1;
            return;
        }
        print();
        return ;
    }
    // 遍历每一列 
    for (int i = 0; i < n; i++) {
        // 如果列、左斜、右斜都没有皇后进入下一个递归 
        if (!shu[i] && !r_xie[x - i] && !l_xie[x + i]) {
            // 标记 
            shu[i] = 1;
            r_xie[x - i] = 1;
            l_xie[x + i] = 1;
            f[x - 1][i] = 1;
            dfs(x + 1);
            // 解除标记 
            f[x - 1][i] = 0;
            shu[i] = 0;
            r_xie[x - i] = 0;
            l_xie[x + i] = 0;
        }
    }
}

int main() {
    cin >> n;
    // 给出初始行 
    dfs(1);
    cout << sum;

    return 0;
}

请大佬帮忙指一下错!谢谢!


by DL_Lingkong @ 2024-02-27 21:03:24

@digua2010 呀这不地瓜吗,这么巧,我也在水这题


by DL_Lingkong @ 2024-02-27 21:14:32

@digua2010 看我的(虽然马蜂m³说很奇怪)

#include <iostream>
using namespace std;
bool visy[1145],visxpy[1145],visxmy[1145];
int n,ans,a[1145],ind;
void dfs(int x)
{
    if(x == n + 1)
    {
        ans++;
        if(ans <= 3)
        {
            for(int i = 1;i <= n;i++)
            {
                cout << a[i] << ' ';
            }
            cout << endl;
        }
        return ;
    }
    for(int y = 1;y <= n;y++)
    {
        if(visy[y] || visxpy[x + y] || visxmy[x - y + n])
        {
            continue;
        }
        visy[y] = visxpy[x + y] = visxmy[x - y + n] = true;
        a[++ind] = y;
        dfs(x + 1);
        visy[y] = visxpy[x + y] = visxmy[x - y + n] = false;
        ind--;
    }
    return ;
}
void be() // init & input
{
    cin >> n;
    return ;
}
void kin() // programming
{
    dfs(1);
    return ;
}
void ei() // output
{
    cout << ans << endl;
    return ;
}
int main()
{
    be();
    kin();
    ei();
    return 0;
}

by digua2010 @ 2024-02-27 21:42:51

《处处皆是比博燃》

谢咯?谢喽。


|