大佬们请问我这代码哪写错了:(

P1219 [USACO1.5] 八皇后 Checker Challenge

hahahahaen @ 2024-04-08 20:55:09

#include <iostream>
using namespace std;
int ans = 0; int m;
int a[13][13];//a==14表示皇后,0表示可以放,14-n表示此处不能放且来自哪一行 

void dfs(int n)
{
    if (n==0)
    {
        ans++;
        if (ans == 1 || ans == 2 || ans == 3)
        {

            for (int i = 13 - m; i < 13; i++)
            {
                for (int j = 0; j < 13; j++)
                {
                    if (a[i][j] == 14)
                    {
                        cout << j + 1 << ' ';
                        break;
                    }
                }
            }
            cout << endl;
        }//n=0即还有0个皇后要放时,输出前三种可能 

    }
    else
    {
        for (int i = 0; i < n; i++)
        {
            if (a[13 - n][i] == 0)//13-n表示行,从13-m到13 
            {
                a[13 - n][i] = 14;
                for (int j = 1; j < n; j++)
                {
                    if (a[13 - n + j][i] == 0) {
                        a[13 - n + j][i] = 14 - n;
                    }
                    if (i + j < n&&a[13 - n + j][i + j] == 0 ) {
                        a[13 - n + j][i + j] = 14 - n;
                    }
                    if (i - j >= 0 && a[13 - n + j][i - j] == 0)
                    {
                        a[13 - n + j][i - j] = 14 - n;
                    }
                }//如果该在、格前没有被标记,则标记 
                dfs(n - 1);
                a[13 - n][i] = 0;
                for (int j = 1; j < n; j++)
                {
                    if (a[13 - n + j][i] == 14 - n) {
                        a[13 - n + j][i] = 0;
                    }
                    if (i + j < n && a[13 - n + j][i + j] == 14 - n) {
                        a[13 - n + j][i + j] = 0;
                    }
                    if (i - j >= 0 && a[13 - n + j][i - j] == 14 - n)
                    {
                        a[13 - n + j][i - j] = 0;
                    }
                }//回溯,只回溯由该行标记的、格 以及皇后格 

            }

        }
    }
}
int main() {

    cin >> m;
    memset(a, 0, sizeof(a));
    dfs(m);
    cout << ans;
    return 0;
}

为啥他输出的一直是0啊啊啊啊啊!蒟蒻哭泣:(


|