if (y < board_size)
{
//第X行的棋子落下
rows[x] = 1; cols[y] = 1; slot1[x + y] = 1; slot2[x - y + board_size - 1] = 1; x2y[x] = y;
}
else
{
//回溯,拿起棋子
if (x > 0)
{
x2y[x] = -1;
x--;
rows[x] = 0; cols[x2y[x]] = 0; slot1[x + x2y[x]] = 0; slot2[x - x2y[x] + board_size - 1] = 0;
continue;
}
else break;
}
if (x == board_size - 1) //如果已经得到了一组解,即当最后一行棋子落定之时
{
for (int i = 0; i < board_size; i++)
{
for (int j = 0; j < board_size; j++)
{
if (x2y[i] == j) Console.Write("Q");
else Console.Write("■");
}
Console.Write("\n");
}
Console.Write("\n");
solution_count++; //总方案数加一
rows[x] = 0; cols[x2y[x]] = 0; slot1[x + x2y[x]] = 0; slot2[x - x2y[x] + board_size - 1] = 0;//放弃这一列