2 solutions

  • 3
    @ 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;
    }
    
    • 0
      @ 2026-3-29 15:38:22

      • 1

      Information

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