我正在课堂上研究八个女王/国际象棋棋盘问题。对于我的代码,我使用的是一维数组,即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
现在我的问题: 我不能为我的生活找出如何获得前面提到的1d阵列b [c]来打印看起来与此相同的板。我是初学者综合科学学生,但我仍然认为这将更加微不足道。
我不是在寻找答案,更多的是暗示我是朝着正确的方向前进,或者是第一行代码。帮助非常感谢。感谢
答案 0 :(得分:0)
像......那样的东西。
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);
}
答案 1 :(得分:0)
我想如果你的数组会告诉你每个行的列是一个女王,你就可以轻松地找出解决方案。不幸的是,你必须逐行产生输出,因为文本终端就是这样的。它也不是那么难:
您已拥有此代码。除了“如果有女王......”部分。因此,让我们解决问题并使其成为一个功能:
bool is_there_a_queen(const int[8] board, int row, int col);
您能否实施is_there_a_queen
?
答案 2 :(得分:0)
#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;
}