acm n皇后深搜
解析见注释
int a[100];
void nq(int k,int n);
int main()
{
int n;
cin >> n;
nq(0,n);
}
//前面的n-1行已经摆放好,开始在n行摆放皇后
void nq(int k,int n)
{
if (k == n)
{
for (int i = 0; i < n; i++)
{
cout << a[i] + 1 << " ";
}
cout << endl; return;
}
//在第n行开始逐个尝试这一行皇后位置,从第一个开始
for (int i = 0; i < n; i++)
{
int j;
//和之前摆好的k行个皇后 的位置比较,从第一行开始遍历直到当前行的上一行。
for ( j = 0; j < k; j++)
{
if (a[j] == i || (abs(a[j] - i) == abs(k - j))) break;
//列相等以及行列之差相等的说明这个尝试的位置不符合要求
}
if (j == k)
{
a[k] = i;
nq(k + 1, n);//递归寻找下一行的皇后位置
}
}
}
|