//8皇后问题
#include <iostream>
using namespace std;
int c[10]; //c[i]对应第i行的棋子放在第几列
int num = 0;
void print()
{
for(int i = 0; i < 8; ++i)
{
for(int j = 0; j < 8; ++j)
{
if(j == c[i])
cout << "1 ";
else
cout << "0 ";
}
cout << endl;
}
cout << endl;
}
void dfs(int r) // r 代表这次处理第几行的
{
if(r == 8)
{
print();
num++;
return;
}
for(int i = 0; i < 8; ++i)
{
c[r] = i; // 第r行随便选一个值
bool isok = true;
for(int j = 0; j < r; ++j) //在此基础上,试,跟前r - 1行有冲突就试下一个
{
if(c[j] == c[r] || c[j] - c[r] == j - r || c[j] - c[r] == r - j)
{
isok = false;
break;
}
}
if(isok)
dfs(r + 1);
}
}
int main(void)
{
dfs(0);
cout << num << endl;
return 0;
}
Q8.8
最新推荐文章于 2024-01-02 14:57:29 发布