晦气的零分代码
查看原帖
晦气的零分代码
775551
caojiaming楼主2023/1/22 13:56

2WA+8TLE 求助

#include <bits/stdc++.h>
using namespace std;
int vis[20][20];
bool have[20][20];
int n,cnt;
void init(int x,int y)
{
    vis[x][y]++;
    for(int i=1;i<=n;i++)
    {
        vis[x][i]++;
        vis[i][y]++;
    }
    int P=x,Q=y;
    while(1)
    {
        if(x+1>n||y+1>n||x+1<1||y+1<1) break;
        vis[++x][++y]++;
    }
    x=P,y=Q;
    while(1)
    {
        if(x-1>n||y-1>n||x-1<1||y-1<1) break;
        vis[--x][--y]++;
    }
    x=P,y=Q;
    while(1)
    {
        if(x+1>n||x+1<1||y-1>n||y-1<1) break;
        vis[++x][--y]++;
    }
    x=P,y=Q;
    while(1)
    {
        if(x-1>n||x-1<1||y+1>n||y+1<1) break;
        vis[--x][++y]++;
    }
}
void init2(int x,int y)
{
    vis[x][y]--;
    for(int i=1;i<=n;i++)
    {
        vis[x][i]--;
        vis[i][y]--;
    }
    int P=x,Q=y;
    while(1)
    {
        if(x+1>n||y+1>n||x+1<1||y+1<1) break;
        vis[++x][++y]--;
    }
    x=P,y=Q;
    while(1)
    {
        if(x-1>n||y-1>n||x-1<1||y-1<1) break;
        vis[--x][--y]--;
    }
    x=P,y=Q;
    while(1)
    {
        if(x+1>n||x+1<1||y-1>n||y-1<1) break;
        vis[++x][--y]--;
    }
    x=P,y=Q;
    while(1)
    {
        if(x-1>n||x-1<1||y+1>n||y+1<1) break;
        vis[--x][++y]--;
    }
}
void dfs(int pos)
{
    if(pos>n)
    {
        cnt++;
        if(cnt<=3)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    if(have[i][j]) cout<<j<<" ";
                }
            }
            cout<<"\n";
        }
        return;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(!vis[i][j])
            {
                have[i][j]=true;
                init(i,j);
                dfs(pos+1);
                init2(i,j);
                have[i][j]=false;
            }
        }
    }
}
int main()
{
    cin>>n;
    dfs(1);
    cout<<cnt<<"\n";
    return 0;
}
2023/1/22 13:56
加载中...