本文共 1126 字,大约阅读时间需要 3 分钟。
/*思路:枚举 然后检测,回朔 总共有s=n*n个点 对于每个点 横坐标为s/now,纵坐标为s%n 水平方向 只需要检查0到s/now竖直方向 只需要检查0到s%now斜线方向 只需要检查左上和右上 能到达s就为一种方案 累加 */#include#include #include using namespace std;const int N=10;int map[N][N]; //0不能放 1可以放 2是黑皇后 3是白皇后 bool row[N][2],column[N][2]; //标记横列有没放 优化速度 0代表黑,1代表白 二维数组 int n,re;inline bool check(int x,int y,int v){ //检查横竖和斜线 int i,a,b; //检查横 /*for(i=0;i =n) break; if(map[a][b]==v) return false; } return true;}void dfs(int now){ int x=now/n; int y=now%n; //优化 到目前行位置前面每行行都有各一个黑白皇后 for(int i=0;i >n){ re=0; memset(row,0,sizeof(row)); memset(column,0,sizeof(column)); for(i=0;i >map[i][j]; dfs(0); cout< <
转载地址:http://gfmvi.baihongyu.com/