在棋盘上安排女王/王后

时间:2015-04-05 22:43:24

标签: arrays pointers multidimensional-array sum n-queens

所以我必须在国际象棋棋盘上安排8个皇后,这样他们才能互相残杀。 我已经在这方面工作了一段时间,需要一些帮助。我开始使用2d数组。我在第一排随机放了1个(一个女王)。我试图通过一行一行地将其余的女王从该位置移开,并将它们放置在上面和对角线元素不会添加到1的位置。

    #include<stdlib.h>
    #include<stdio.h>

    #define dim 8


    int main(void)
    {
        int chess[dim] [dim] = {{0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0}}, i, j, *piece, vert_sum, diag_sum;

piece = &chess[0] [(rand() %8) + 1];
*piece = 1;

vert_sum = vert_sum + chess[i--] [j];
diag_sum = diag_sum + chess[i--] [j--];

for(i=1; i<8; i++)
{
    piece = &chess[i] [j=0];
    while(vert_sum == 1 || diag_sum == 1)
        {
            j++;

        }
    if(vert_sum != 1 && diag_sum != 1)
        {   

            *piece = 1;
        }
}

for(i=0; i<8; i++)
{
    for(j=0; j<8; j++)
    {
        printf("%d ", chess[i] [j]);
        if(j==7)
        {
            printf("\n");
        }
    }
}

}

几乎所有从vert_sum = vert_sum + ....到if(vert_sum!= 1&amp;&amp; diag_sum!= 1){* piece = 1;}是随机的废话我一直在尝试。任何有关我感冒的帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是一个可以使用回溯解决的经典问题。你可以寻找伪代码。

wiki

答案 1 :(得分:0)

谷歌“回溯”,这是解决问题的传统方式。提出的代码还有很长的路要走。