标签:
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。
给定棋盘的大小n (n ≤ 13)
输出整数表示有多少种放置方法。
8
92
n<=13
(时限提高了,不用打表了)
#include<cstdio> using namespace std; #define N 101 int a[N],b[N],c[N],d[N],n,tot; void go(int i){ for(int j=1;j<=n;j++){//寻找放置皇后的位置 if(!b[j]&&!c[i+j]&&!d[i-j+n-1]){//寻找放置皇后的位置 //由于C++不能操作负数组,因此考虑加n-1 a[i]=j;//摆放皇后 b[j]=1;//宣布占领第j列 c[i+j]=1;//占领两个对角线 d[i-j+n-1]=1; if(i==n) tot++;//n个皇后都放置好,一种情况 else go(i+1);//继续递归放置下一个皇后 b[j]=0;//递归返回即为回溯一步,当前皇后退出 c[i+j]=0; d[i-j+n-1]=0; } } } int main(){ scanf("%d",&n); go(1); printf("%d\n",tot); return 0; }
1295 N皇后问题
原文地址:http://www.cnblogs.com/shenben/p/5561554.html