八皇后问题想必大家都听说过(没听过的,也不会在这里吧?)
解题方法有很多,不在赘叙:
// N皇后
#include<iostream>
#include<algorithm>
//我试过一次边长30的,嗯,它沉默了……
#define n 40
using namespace std;
bool chessb[n][n];
int a,sum;
bool flag(int h, int i)
{
if(h >= a) return 0;
for (int i2 = 0; i2 < h; i2++)
for (int i3 = 0; i3 < a; i3++)
if (chessb[i2][i3] && (abs(i - i3) == abs(i2 - h) || i3 == i))
return 0;
return 1;
}
void show()
{
for (int i = 0; i < a; i++)
{
for (int i2 = 0; i2 < a; i2++)
{
if (chessb[i][i2])
cout << "皇";
else
cout << "[]";
}
cout << "\n";
}
cout << "\n";
return;
}
int main()
{
cout << "adge length:";
cin >> a;
int h = 0,s = 0;
bool b;
while(h != -1){
b = 0;
for (int i = s; i < a; i++)
if (flag(h, i))
{
b = 1;
chessb[h][i] = 1;
break;
}
if (b && h == a - 1)
{
show();
sum++;
}
if (b){
h++;
s = 0;
}
else
{
h--;
for (int i2 = 0; i2 < a; i2++)
if (chessb[h][i2])
{
chessb[h][i2] = 0;
s = i2 + 1;
break;
}
}
}
cout << sum << "kinds";
return 0;
}