2014-09-18 247 views
0

我正在研究班级中的八个皇后/国际象棋棋盘问题。对于我的代码,我使用一维数组,即q [c](c是列)来存储由女王组成的行的值。例如,q [1] = 3意味着在第2列(基于0的阵列)中,在第4行中存在皇后。使用1d阵列打印2d阵列

原始问题使用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 

现在对于我的问题:我不能为我的生活弄清楚如何获得上述一维数组b [C ]打印看起来与此相同的电路板。我是一名初学者科比学生,但我仍然认为这将更加微不足道。

我不是在寻找答案,更多的是提示我在正确的方向,或者第一行代码。帮助非常感谢。感谢

+0

提示:天真的方式只是:从您的一维数组中生成二维数组,然后以相同的方式打印它。如果你经历这个练习,你可能会碰到一些更好的想法。 – 2014-09-18 17:22:02

+0

在你上一次为你可以检查我是否等于b [j]并打印0或1 – 2014-09-18 17:27:29

回答

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

谢谢。我不知道我以前没有看到它,但现在一切都变得有意义了!非常感谢 – user3566906 2014-09-19 18:56:55

+0

你可以选择一个最喜欢的答案... – AnthonyLambert 2014-09-22 09:57:09

0

我想,如果你的阵列会告诉你,其中每个女王就是你'很容易找出解决方案。不幸的是,你必须逐行生成输出,因为文本终端就是这样。这并不难之一:

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

你已经有了这个代码。除了“如果有女王......”的部分。因此,让我们解决问题并使之成为一项功能:

bool is_there_a_queen(const int[8] board, int row, int col); 

您能否实施is_there_a_queen

+1

是的,我没有在问题中包括那部分抱歉,但我有一个功能,做了所有的检查(行,向下诊断,向上诊断),并使用回溯和转到(这是我们的教授向我们展示的第一种方式)。这是非常有益的寿,谢谢 – user3566906 2014-09-19 18:55:51

+0

我记得那时候,当我们在课堂上做了八皇后问题时,我们做了没有'goto'的事情......很高兴我可以帮忙,很难。 – 5gon12eder 2014-09-19 19:20:21

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; 
} 
+0

非常感谢!多谢! – user3566906 2014-09-18 18:54:21

+0

感谢您的帮助,我已经利用了您的所有答案并找出答案,再次感谢 – user3566906 2014-09-18 18:54:46