###### tags: `I2P(I)Hu2022`
# 13333 - Stewie vs Brian
> by schdoel
## Brief
Finish a 9x9 sudoku
## Solution
Finish the sudoku, according to sudoku rules
## Reference Code
```cpp=
#include <stdio.h>
int valid(int[][9], int, int, int);
int solve(int[][9]);
int is_empty(int[][9], int *, int *);
int main() {
int sudoku[9][9];
for(int i=0; i<9; i++) scanf("%d %d %d %d %d %d %d %d %d", &sudoku[i][0], &sudoku[i][1], &sudoku[i][2], &sudoku[i][3], &sudoku[i][4], &sudoku[i][5], &sudoku[i][6], &sudoku[i][7], &sudoku[i][8]);
if (solve(sudoku)) {
for (int x = 0; x < 9; x++) {
for (int y = 0; y < 9; y++){
printf("%d", sudoku[x][y]);
if(y==9-1)printf("\n");
else printf(" ");
}
}
}
else printf("no solution\n");
return 0;
}
int valid(int sudoku[][9], int row, int col, int guess) {
int corner_x = row / 3 * 3;
int corner_y = col / 3 * 3;
for (int x = 0; x < 9; ++x) {
if (sudoku[row][x] == guess) return 0;
if (sudoku[x][col] == guess) return 0;
if (sudoku[corner_x + (x % 3)][corner_y + (x / 3)] == guess) return 0;
}
return 1;
}
int is_empty(int sudoku[][9], int *row, int *col) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (!sudoku[i][j]) {
*row = i;
*col = j;
return 1;
}
}
}
return 0;
}
int solve(int sudoku[][9]) {
int row;
int col;
if(!is_empty(sudoku, &row, &col)) return 1;
for (int i = 1; i < 10; i++) {
if (valid(sudoku, row, col, i)) {
sudoku[row][col] = i;
if(solve(sudoku)) return 1;
sudoku[row][col] = 0;
}
}
return 0;
}
```