八皇后

题目

 

 这道题目的主要思路是:

就是正常的dfs就有几个点值得注意:

1.我写的程序函数算一层循环里面再加一层循环

2.对角线的处理:

 

     👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

 //注释:后面加一个 n 是因为数组的下标不能为负所以给他加一个偏移量

 

程序:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,l[100]={0},h[100]={0},udg[100]={0},dg[100]={0},ans=0;
 4 void dfs(int k)
 5 {    if(k>n)
 6     {    ans++;
 7         if(ans<=3)
 8         {    for(int i=1;i<=n;i++) cout<<h[i]<<" ";
 9             cout<<endl;
10         }
11         return;
12     }
13     for(int i=1;i<=n;i++)
14     {    if(l[i]==0&&dg[k+i]==0&&udg[k-i+n]==0)
15         {    dg[k+i]=l[i]=udg[k-i+n]=1,h[k]=i;
16             dfs(k+1);
17             dg[k+i]=l[i]=udg[k-i+n]=0;
18         }
19     }
20 }
21 int main()
22 {    cin>>n;
23     dfs(1);
24     cout<<ans<<endl;
25 }

 

posted @ 2022-04-09 21:31  王浩泽  阅读(48)  评论(0)    收藏  举报