用深搜做的

P1219 [USACO1.5] 八皇后 Checker Challenge

RY111 @ 2024-08-04 15:34:04

不知道为啥和想象的输出不同,模拟了一下2,感觉应该输出是对的,结果还是不对

#include<bits/stdc++.h>
using namespace std;
const int maxn=15;
bool st[maxn];
int cnt=0;
int n;
vector<int> a[1000];

void dfs(int x)//枚举到第几行
{

    if(x==n)
    {
        for(auto it:a[cnt])
        {
            cout<<it<<" ";
        }

//      cout<<endl;
        cnt++;
        return ;
    }

    for(int i=1; i<=n; i++)//放到哪一列
    {
        if(st[i]==0)
        {
            st[i]=1;
            a[cnt].push_back(i);
            dfs(x+1);
            st[i]=0;

        }

    }
}
int main()
{

    cin>>n;
    dfs(1);
    cout<<cnt;
}

by RY111 @ 2024-08-04 15:44:54

把边界改成x==n+1了还是不对


by _Yonder_ @ 2024-08-04 15:46:13

斜对角线啥的没判断


by RY111 @ 2024-08-04 15:53:15

@Yonder 但是对于它输出很奇怪,即使先不考虑对角线这个问题好像也不对 我想的是应该输出顺序应该是这样,但是实际是下面那个 123 132 213 231...

/*
1 2 3
3 2
2 1 3
3 1
3 1 2
2 1
6
*/

by _Yonder_ @ 2024-08-04 15:55:38

@RY111 我的std输出0


by _Yonder_ @ 2024-08-04 15:58:22

@RY111 一般都是字典序的问题,建议先补充对斜对角线的判定


by RY111 @ 2024-08-04 16:07:58

@Yonder 好嘞谢谢了


|