您的位置:首页 > 其它

八皇后问题解析

2011-05-30 11:51 183 查看
 

#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;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  include