mirror of https://github.com/rui314/9cc.git
Update an example as we can now handle more C grammars.
This commit is contained in:
parent
01a437d587
commit
5f7940adc3
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue