Я работаю над проблемой восьми королевы/шахматной доски в моем классе. Для моего кода я использую одномерный массив, т.е. q [c] (c - столбец), чтобы сохранить значение строки, состоящей из королевы. например, q [1] = 3 означает, что в столбце 2 (массив, основанный на 0) в строке 4 есть королева.
В исходной задаче использовался 2d-массив, поэтому b [r] [c] будет либо = 0, либо 1, 1 - королевой, а остальное - 0. В программе использовалась функция ok для проверки каждой королевы, которую она помещала против всех ранее размещенных ферзей, и в конце напечатала результат.
The print function was
for(int j=0; j<c;j++)
cout<<endl;
for(int i=0; i<c;i++)
cout<< b[i][j];
который напечатал 92 платы решений, которые выглядели примерно так
10000000
00001000
01000000
00010000
00000010
00100000
00000100
00000001
Теперь для моей проблемы: я не могу для жизни меня выяснить, как получить вышеупомянутый 1-й массив b [c], чтобы напечатать плату, которая выглядит так же, как эта. Я начинающий ученик, но я все еще думал, что это будет намного более тривиально.
Я не ищу ответа, больше намека на то, чтобы привести меня в правильном направлении или, может быть, в первую строку кода. Помощь очень высоко ценится. благодаря
Что-то вроде....
for (int y = 0; y<8; y++) {
int val = b[y];
for (int x=0; x<8; x++) {
x==val ? printf("1") : printf("0") ;
}
printf("\n");
}
или
for (int y = 0; y<8; y++) {
char[9] line;
strcpy(line,"00000000");
line[b[y]] = '1';
printf("%s\n",line);
}
#include <iostream>
/*
10000000
00001000
01000000
00010000
00000010
00100000
00000100
00000001
*/
int main()
{
int q[] = {0, 4, 1, 3, 6, 2, 5, 7};
for (int i = 0; i < 8; ++i )
{
for (int j = 0; j < 8; ++j )
{
if ( q[i] == j )
{
std::cout << 1;
}
else
{
std::cout << 0;
}
}
std::cout << std::endl;
}
return 0;
}
Я предполагаю, что если ваш массив расскажет вам, в каком столбце каждой строки есть королева, вы легко найдете решение. К сожалению, вы должны создавать свой вывод подряд за строкой, так как это как текстовые терминалы. Это не так сложно:
У вас уже есть код для этого. За исключением части "если есть королева...". Поэтому позвольте разбить проблему и сделать ее функцией:
bool is_there_a_queen(const int[8] board, int row, int col);
Сможете ли вы реализовать is_there_a_queen
?
goto
… Рад, что смог помочь, жестко.