深搜,返回3221225620,求调,会关注

P1219 [USACO1.5] 八皇后 Checker Challenge

水星湖 @ 2023-08-25 16:55:50

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,p[15],cnt,b[15];
double xie(int x1,int y1,int x2,int y2)//斜率 
{
    return abs(x1-x2)/abs(y1-y2);
}
bool check()
{
    memset(b,0,sizeof(b));
    for(int i=1;i<=n;i++)
    {
        if(++b[p[i]]==2)
            return 0; //保证不在同一列 
    }
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
        {
            if(xie(p[i],p[j],i,j)==1||xie(p[i],p[j],i,j)==-1)
                return 0;//保证不在同一对角线上 
        }
    return 1;
}
void dfs(int step)
{
    if(step>n)
    {
        if(check())
        {
            cnt++;
            if(cnt<=3)
            {
                for(int i=1;i<=n;i++)
                    cout<<p[i]<<" ";
                cout<<endl;
            }
        }
        return;
    }
    for(int i=1;i<=n;i++)//保证不在同一行 
    {
        p[step] = i;
        dfs(step+1);
    }
}
int main(){
    cin>>n;
    dfs(1);
    cout<<cnt;
    return 0;
}

by Null_h @ 2023-08-25 18:22:51

很傻的错误(但调了好久

1.斜率部分顺序有误

2.没转double

3.思路有误,会TLE


#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,p[15],cnt,b[15];
double xie(int y1,int y2,int x1,int x2)//斜率 
{
    return double(abs(x1-x2))/abs(y1-y2);
}
bool check()
{
    memset(b,0,sizeof(b));
    for(int i=1;i<=n;i++)
    {
        if(++b[p[i]]==2)
            return 0; //保证不在同一列 
    }
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
        {
            if(xie(p[i],p[j],i,j)==1)
                return 0;//保证不在同一对角线上 
        }
    return 1;
}
void dfs(int step)
{
    if(step>n)
    {
        if(check())
        {
            cnt++;
            if(cnt<=3)
            {
                for(int i=1;i<=n;i++)
                    cout<<p[i]<<" ";
                cout<<endl;
            }
        }
        return;
    }
    for(int i=1;i<=n;i++)//保证不在同一行 
    {
        p[step] = i;
        dfs(step+1);
    }
}
int main(){
    cin>>n;
    dfs(1);
    cout<<cnt;
    return 0;
}

by 水星湖 @ 2023-09-08 19:30:21

@kdqs8218 好耐心的大佬 关注了


by 水星湖 @ 2023-09-08 19:34:58

@kdqs8218 为什么在斜率那块不用判断斜率等于 -1


by Null_h @ 2023-09-08 20:39:03

@zrczrczrczrc 既然加了abs,那必然是正数啊


by 水星湖 @ 2023-09-08 21:27:21

@kdqs8218 哦哦哈哈哈傻了


|