现在的位置: 首页 > 综合 > 正文

Hdu 2553 N皇后问题

2019年04月08日 ⁄ 综合 ⁄ 共 488字 ⁄ 字号 评论关闭

大意略。

位运算求N皇后问题是目前最快的求解N皇后问题解法之一。

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;

#define all (1<<n)-1

int n;

void dfs(int row, int ld, int rd, int &ans)
{
	int p, pos;
	if(row == all) { ans++; return ; }
	pos = all & (~(row | ld | rd)); //求所有可能放皇后的位置 
	while(pos)
	{
		p = pos & (~pos+1); //求最右边的1 
		pos -= p;
		dfs(row | p, (ld | p)<<1, (rd | p)>>1, ans);
	}
	return ;
}

int main()
{
	while(~scanf("%d", &n) && n)
	{
		int ans = 0;
		dfs(0, 0, 0, ans);
		printf("%d\n", ans);
	}
	return 0;
}

抱歉!评论已关闭.