Расставьте ферзей на шахматной доске

Поэтому мне нужно расставить 8 ферзей на шахматной доске, чтобы они не могли убить друг друга. Я работаю над этим некоторое время и нуждаюсь в помощи. Я начал с использования 2-мерного массива. Я произвольно поставил 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 && diag_sum! = 1) {* piece = 1;} - это случайная чушь, которую я пробовал. Любая помощь в том, что я делаю, была бы принята с благодарностью.


person Donnie Pryce    schedule 05.04.2015    source источник


Ответы (2)


Это классическая проблема, которую можно решить с помощью поиска с возвратом. Можно поискать псевдокод.

вики

person Tin Rabzelj    schedule 05.04.2015

Google "возврат с возвратом", это традиционный способ решения проблемы. Представленный код должен пройти долгий путь.

person Mike Bessonov    schedule 05.04.2015