1 solutions

  • -1
    @ 2024-7-26 16:21:08
    #include<bits/stdc++.h>
    using namespace std;
    const int N=10;
    bool col[N],dg[2*N],ndg[2*N];//col是判断某一列有没有元素
    int n;                       //dg[]表示左上到右下有没有元素ndg[]
    char g[N][N];                //ndg[]表示左下到右上有没有元素
    void dfs(int r)
    {
       if(r==n)
       {
          for(int i=0;i<n;i++)
          {
             cout<<g[i]<<endl;
          }
          cout<<endl;
          return ;
       }
       for(int i=0;i<n;i++)
       {
          if(col[i]==0&&dg[r-i+n]==0&&ndg[r+i]==0)//列,左上到右下都没有
          {
             col[i]=dg[r-i+n]=ndg[r+i]=1;//标记(r,c)的对应列和对角线
             g[r][i]='Q';
             dfs(r+1);
             g[r][i]='.';
             col[i]=dg[r-i+n]=ndg[r+i]=0;
          }
       }
    }
    int main()
    {
       cin>>n;
       for(int i=0;i<n;i++)
       {
          for(int j=0;j<n;j++)
          {
             g[i][j]='.';
          }
       }
       dfs(0);
       return 0;
    }
    
    • 1

    Information

    ID
    237
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    40
    Accepted
    10
    Uploaded By