acm n皇后深搜

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 11:12   30   0

acm n皇后深搜

解析见注释

int a[100];
void nq(int k,int n);
int main()
{
 int n;
 cin >> n;
 nq(0,n);
 
}
//前面的n-1行已经摆放好,开始在n行摆放皇后
void nq(int k,int n)
{
 if (k == n)
 {
  for (int i = 0; i < n; i++)
  {
   cout << a[i] + 1 << " ";
  }
  cout << endl; return;
 }
  //在第n行开始逐个尝试这一行皇后位置,从第一个开始
 for (int i = 0; i < n; i++)
 {
  int j;
      //和之前摆好的k行个皇后 的位置比较,从第一行开始遍历直到当前行的上一行。
  for ( j = 0; j < k; j++)
  {
   if (a[j] == i || (abs(a[j] - i) == abs(k - j))) break;
           //列相等以及行列之差相等的说明这个尝试的位置不符合要求
  }
  if (j == k)
  {
   a[k] = i;
   nq(k + 1, n);//递归寻找下一行的皇后位置

  }
 }

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP