[英]Printing a 2d array using a 1d array
我正在上课时研究八个皇后/棋盘问题。 对于我的代码,我正在使用一维数组,即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]来打印与此相同的电路板。 我是初学者计算机科学专业的学生,但我仍然认为这将变得微不足道。
我不是在寻找答案,更多是在向正确的方向指引我,或者可能是第一行代码。 非常感谢您的帮助。 谢谢
就像是....
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);
}
我猜想,如果您的数组可以告诉您皇后区在每一行的哪一列 ,那么您会很容易地找到解决方案。 不幸的是,您必须逐行生成输出,因为这是文本终端喜欢的方式。 这也不难:
您已经有了此代码。 除了“如果有皇后……”部分。 因此,让我们分解问题并使之成为一个函数:
bool is_there_a_queen(const int[8] board, int row, int col);
您将能够实现is_there_a_queen
吗?
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.