Я пытаюсь разработать решение загадки с восемью ферзями, где 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 ферзей, запустите снова, но с отметкой «#» в месте расположения 2-го ферзя и повторите шаги 4-5.
- если> 7 ферзей, напечатайте массив и запустите снова.
- если ‹= 7 ферзей, повторяйте шаг 8 до тех пор, пока во 2-м ряду ферзей не останется «#».
- если во 2-м ряду ферзя больше нет «#», освободить память из этого ряда.
- Повторите шаг 8, но для позиции 3-го ферзя.
- Повторите шаги 8-11, но для позиции 4-го ферзя. И т. д.
- Если больше нет решений, повторите шаги 2-13, но отметьте «#» там, где на этот раз был 1-й ферзь.
- Повторяйте шаг 14 до тех пор, пока в первой строке не останется «#».
Я никогда не выполнял никакой работы или программ, использующих 2d-массивы, поэтому любая помощь или даже пример кода будут очень признательны!
placeQueen
. Вы также зацикливаетесь на всей доске, когда утверждаете, что вам просто нужно это в одном месте. - person chris   schedule 26.07.2012