Update an example as we can now handle more C grammars.

This commit is contained in:
Rui Ueyama 2018-08-25 02:30:04 +00:00
parent 01a437d587
commit 5f7940adc3
1 changed files with 14 additions and 14 deletions

View File

@ -4,10 +4,10 @@
// $ gcc -static -o tmp-nqueen tmp-nqueen.s
// $ ./tmp-nqueen
int print_board(int *board) {
for (int i = 0; i < 10; i=i+1) {
for (int j = 0; j < 10; j=j+1)
if (board[i * 10 + j])
int print_board(int board[][10]) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++)
if (board[i][j])
printf("Q ");
else
printf(". ");
@ -16,37 +16,37 @@ int print_board(int *board) {
printf("\n\n");
}
int conflict(int *board, int row, int col) {
for (int i = 0; i < row; i=i+1) {
if (board[i * 10 + col])
int conflict(int board[][10], int row, int col) {
for (int i = 0; i < row; i++) {
if (board[i][col])
return 1;
int j = row - i;
if (0 < col - j + 1 && board[i * 10 + col - j])
if (0 < col - j + 1 && board[i][col - j])
return 1;
if (col + j < 10 && board[i * 10 + col + j])
if (col + j < 10 && board[i][col + j])
return 1;
}
return 0;
}
int solve(int *board, int row) {
int solve(int board[][10], int row) {
if (row > 9) {
print_board(board);
return 0;
}
for (int i = 0; i < 10; i=i+1) {
for (int i = 0; i < 10; i++) {
if (conflict(board, row, i)) {
} else {
board[row * 10 + i] = 1;
board[row][i] = 1;
solve(board, row + 1);
board[row * 10 + i] = 0;
board[row][i] = 0;
}
}
}
int main() {
int board[100];
for (int i = 0; i < 100; i=i+1)
for (int i = 0; i < 100; i++)
board[i] = 0;
solve(board, 0);
return 0;