我正在尝试开发8 个皇后谜题的解决方案,其中 8 个皇后应该放在一个 8x8 棋盘上,这样没有两个皇后可以互相攻击。我可以打印出我的“#”板,但不知道如何在第一个位置放置一个皇后,并使所有水平、垂直和对角线点成为“x”。
这是我到目前为止所拥有的:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define ROW 8
#define COL 8
// Make the chessboard
int main(int argc, char * argv[])
{
char board[ROW][COL];
int i, j;
for(i = 0; i < ROW; i++)
{
for(j = 0; j < COL; j++)
{
board[i][j] = '#';
printf(" %c", board[i][j]);
}
printf("\n");
}
return 0;
}
// Place queen on first '#'
int placeQueen(char board[ROW][COL])
{
char queenSpace;
int i, j;
for(i = 0; i < ROW; i++)
{
for(j = 0; j < COL; j++)
{
queenSpace = 'Q';
board[i][j] = queenSpace;
printf(" %c", board[1][1]);
}
printf("\n");
}
return 0;
}
现在的输出在左边,我需要它如右图所示:
# # # # # # # # Q x x x x x x x
# # # # # # # # x x # # # # # #
# # # # # # # # x # x # # # # #
# # # # # # # # x # # x # # # #
# # # # # # # # x # # # x # # #
# # # # # # # # x # # # # x # #
# # # # # # # # x # # # # # x #
# # # # # # # # x # # # # # # x
这是我的算法:
- 创建一个包含所有“#”的 8x8 数组。
- 将皇后放在第一个可用的“#”上。
- 将所有水平、垂直和对角方块从皇后位置更改为“x”。
- 将另一个皇后放在第一个位置,即“#”。
- 将所有水平、垂直和对角方块从新的皇后位置更改为“x”。
- 重复步骤 4-5 直到没有更多可用的“#”。
- 如果 > 7 个皇后,打印数组并再次运行。
- 如果 <= 7 个皇后,则再次运行,但在第二个皇后的位置标有“#”并重复步骤 4-5。
- 如果 > 7 个皇后,打印数组并再次运行。
- 如果 <= 7 个皇后,重复第 8 步,直到第二个皇后行中不再有“#”。
- 如果第二个皇后行中没有更多的“#”,则从该行释放内存。
- 重复第 8 步,但要换到第 3 个皇后的位置。
- 重复步骤 8 - 11,但对于第四个皇后的位置。等等。
- 如果没有更多解决方案,请重复步骤 2-13,但在这次第一个皇后所在的位置标记“#”。
- 重复第 14 步,直到第一行不再有“#”。
我从来没有使用二维数组做过任何工作或程序,所以任何帮助甚至示例代码都将不胜感激!