Опитвам се да разработя решение на пъзела с 8 дами, където трябва да бъдат поставени 8 дами шахматна дъска 8x8, така че двама да не могат да се атакуват един друг. Мога да отпечатам дъската си с „#“, но не мога да разбера как да поставя дама на първото място и да направя всички хоризонтални, вертикални и диагонални петна „x“.
Ето какво имам досега:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define ROW 8
#define COL 8
// Make the chessboard
int main(int argc, char * argv[])
{
char board[ROW][COL];
int i, j;
for(i = 0; i < ROW; i++)
{
for(j = 0; j < COL; j++)
{
board[i][j] = '#';
printf(" %c", board[i][j]);
}
printf("\n");
}
return 0;
}
// Place queen on first '#'
int placeQueen(char board[ROW][COL])
{
char queenSpace;
int i, j;
for(i = 0; i < ROW; i++)
{
for(j = 0; j < COL; j++)
{
queenSpace = 'Q';
board[i][j] = queenSpace;
printf(" %c", board[1][1]);
}
printf("\n");
}
return 0;
}
Изходът в момента е отляво, трябва да е както е показано вдясно:
# # # # # # # # Q x x x x x x x
# # # # # # # # x x # # # # # #
# # # # # # # # x # x # # # # #
# # # # # # # # x # # x # # # #
# # # # # # # # x # # # x # # #
# # # # # # # # x # # # # x # #
# # # # # # # # x # # # # # x #
# # # # # # # # x # # # # # # x
Ето моят алгоритъм:
- Създайте масив 8x8 с всички '#'.
- Поставете дама на първия наличен '#'.
- Променете всички хоризонтални, вертикални и диагонални квадрати от позиция на дамата на 'x'.
- Поставете друга дама на първо място, което е '#'.
- Променете всички хоризонтални, вертикални и диагонални квадрати от нова позиция на дамата на 'x'.
- Повторете стъпки 4-5, докато изчезне „#“.
- Ако > 7 дами, отпечатайте масив и стартирайте отново.
- Ако ‹= 7 дами, стартирайте отново, но с '#', отбелязано на мястото на 2-ра дама, и повторете стъпки 4-5.
- ако > 7 дами, отпечатайте масив и стартирайте отново.
- ако ‹= 7 дами, повторете стъпка 8, докато няма повече '#' във втория ред на дамата.
- ако няма повече '#' във втория ред на дамата, освободете памет от този ред.
- Повторете стъпка 8, но за 3-та позиция на дамата.
- Повторете стъпки 8 - 11, но за 4-та позиция на дамата. и т.н.
- Ако няма повече решения, повторете стъпки 2-13, но маркирайте '#', където този път беше първата царица.
- Повторете стъпка 14, докато няма повече '#' в първия ред.
Никога не съм работил или съм правил програми, използващи 2d масиви, така че всяка помощ или дори примерен код ще бъдат много оценени!
placeQueen
. Вие също преглеждате цялата си дъска, когато твърдите, че имате нужда от нея само на едно място. - person chris   schedule 26.07.2012