繁体   English   中英

使用一维数组打印二维数组

[英]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);
    }

我猜想,如果您的数组可以告诉您皇后区在每一的哪一 ,那么您会很容易地找到解决方案。 不幸的是,您必须逐行生成输出,因为这是文本终端喜欢的方式。 这也不难:

  • 对于每一行:
    • 对于每一列:
      • 如果在(行,列)处有一个女王:打印1,否则打印0

您已经有了此代码。 除了“如果有皇后……”部分。 因此,让我们分解问题并使之成为一个函数:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM