【wikioi】1295 N皇后问题
算法:DFS
刚开始卡了我一下,我竟然傻到用二维来放皇后= =。导致一直TLE。。。。
其实用1维就行了的,下标为行(列),值为列(行)
我是用下标为列做的。
上代码
#include <iostream>
using namespace std;
int n, ans = 0;
int map[14];
void dfs(int x)
{
	if(x > n) {ans++; return;}
	int i, j;
	for(i = 1; i <= n; i++) //放在某行
	{
		map[x] = i;
		for(j = 1; j < x; j++) //判断前面列是否有重合,直接判断横行 和 斜行 (可自己画图为什么判断斜行成立)
			if((map[j] == map[x]) ||
			   (x-map[x] == j-map[j] || x+map[x] == j+map[j]))
				break;
		if(j == x)
			dfs(x+1);
	}
}
int main()
{
	cin >> n;
	dfs(1);
	cout << ans;
	return 0;
}
    博客地址:www.cnblogs.com/iwtwiioi 本文为博主原创文章,未经博主允许不得转载。一经发现,必将追究法律责任。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号