1 solutions

  • 1
    @ 2025-3-21 16:49:33
    #include<bits/stdc++.h>
    using namespace std;
    const int N=8;
    int ans[100][10];
    int a[N];
    int cnt;
    int row[N],dg[N*2+2],ndg[N*2+2];
    void dfs(int r)
    {
        if(r==N) //找到一组解 
        {
            cnt++;
            for(int i=0;i<N;i++) //记录当前这组方案 
                ans[cnt][i]=a[i]+1;
            return ;
        }
        for(int c=0;c<N;c++) //枚举列 
        {
            if(row[c]==0&&dg[r+c]==0&&ndg[r-c+N]==0) //可以放置 
            {
                row[c]=dg[r+c]=ndg[r-c+N]=1; //标记同列,同对角线 
                a[r]=c; //记录第cnt个解的第r个元素是c列 
                dfs(r+1); //搜索下一行 
                row[c]=dg[r+c]=ndg[r-c+N]=0; //换个分支 
            }
        }
    }
    int main()
    {
        dfs(0);
        int n;
        cin>>n;
        while(n--)
        {
            int t;
            cin>>t;
            for(int i=0;i<8;i++)
                cout<<ans[t][i];
            cout<<endl; 
        }
        return 0;
    }
    
    • 1

    Information

    ID
    238
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    14
    Accepted
    5
    Uploaded By