#include <iostream> using namespace std; //已确定每一行都有一个皇后 //重复的执行: 在x行中逐个查找---符合的就先放置并在关联位置染上色---进行下一行的查找 //---完毕后撤销原来在x行设置的关联染色并继续在该行中查找下一个符合的位置 //结束条件:当深度查找执行到的行数>8行时就返回 bool bMemoryArray[3][30] = {false}; int nResultNum = 0; //在本行中执行放置皇后 void dfs(int row) { //行数大于8行,说明皇后已经摆放完毕 if (row == 9) { //结果数加1 nResultNum++; return; } //在该行中进行行遍历 for (int col=1;col<=8;col++) { //1代表列是否被染色,2代表主对角线是否被染色,3代表副对角线是否被染色 if (!bMemoryArray[0][col] && !bMemoryArray[1][col-row+8] && !bMemoryArray[2][col+row]) { //如果都没染色则设置染色 bMemoryArray[0][col] = bMemoryArray[1][col-row+8] = bMemoryArray[2][col+row] = true; //继续下一行的放置皇后 dfs(row+1); //执行完毕后进行撤销原先在本行的相关染色 bMemoryArray[0][col] = bMemoryArray[1][col-row+8] = bMemoryArray[2][col+row] = false; //继续本行的一个符合位置的搜索 } } } int main() { //从第一行开始放置皇后 dfs(1); cout << "Eight Quees number of results: "<< nResultNum ; return 0; }