N-Queens II 输出可行解数量

题目:

链接

解答:

输出可行解个数。参见上一篇博客。

代码:

  class Solution {
  public:
	  int totalNQueens(int n) {
		  int res = 0;
		  vector<string> temp;
		  search(0, n, temp, res);
		  return res;
	  }
  private:
	  void search(int level, int n, vector<string> &temp, int &res)
	  {
		  if (level == n)
		  {
			  ++res;
			  return;
		  }
		  string str (n, '.');
		  for(int i = 0; i < n; i++)
		  {
			  str[i] = 'Q';
			  if (judge(i, temp))
			  {
				  temp.push_back(str);
				  search(level + 1, n, temp, res);
				  temp.pop_back();
			  }
			  str[i] = '.';
		  }
	  }
	  bool judge(int pos, vector<string> &temp)
	  {
		  for (int i = 0; i < temp.size(); i++)
		  {
			  if (temp[i][pos] == 'Q')
			  {
				  return false;
			  }
			  for (int j = 0; j < temp[i].length(); j++)
			  {
				  if (temp[i][j] == 'Q')
				  {
					  if (abs(int(temp.size()) - i) == abs(j - pos))
						  return false;
				  }
			  }
		  }
		  return true;
	  }
  };


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值