和题解答案一样,为啥只过了第一个测试点

P1219 [USACO1.5] 八皇后 Checker Challenge

wxc_1 @ 2023-11-21 14:14:37

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

int col[15];
int n,ans[3][15]={0},sum=0;

bool check(int r,int c)
{
    for(int i=1;i<r;i++)
    {
        if(col[i]==c || abs(col[i]-c)==abs(i-r))
            return false;
    }
    return true;
}

void dfs(int r)
{
    if(r==n+1)
    {
        for(int i=1;i<=n;i++)
            ans[sum][i]=col[i];
        sum++;
        return;
    }
    for(int i=1;i<=n;i++)
    {
        if(check(r,i))
        {
            col[r]=i;
            dfs(r+1);
        }
    }
}

int main()
{
    cin>>n; 
    dfs(1);
    for(int i=0;i<3;i++)
    { 
        for(int k=1;k<=n;k++)
            cout << ans[i][k] << ' ';
        cout << endl;
    }
    cout << sum;
    return 0;
}

by wxc_1 @ 2023-11-21 14:49:51

过来,原来是数组开小了


|