# 13333 - Stewie vs Brian ## Brief Stewie and Brian are competing against each other in a game of partially filled sudoku. The one who finishes it first wins. Stewie can finish a 9x9 sudoku in 3 minutes. Help Brian build a program so he can finish it before stewie. ## Input 9x9 2d array with numbers ranging from 0 to 9 the 0 represents blank needed to be filled ## Output solved 9x9 sudoku or if there's no solution output "no solution\n" ## Solution ```c= //by 景堯 #include <stdio.h> #define bool int #define false 0 #define true 1 int good = false; int _list[10][10]; int row[10][10]; int column[10][10]; int square[10][10]; int seq[9] = {5, 2, 7, 1, 9, 3, 4, 6, 8}; int check(int r, int c, int num){ if (row[r][num] == 1) return false; if (column[c][num] == 1) return false; if (square[r / 3 * 3 + c / 3][num] == 1) return false; return true; } void go(int src){ if (src == 81){ for (int i = 0; i < 9; i++) for (int k = 0; k < 9; k++) printf("%d%c", _list[i][k], (k != 8 ? ' ' : '\n')); good = true; return; } int r = src / 9; int c = src % 9; if (_list[r][c] != 0) go(src+1); else{ for (int i = 8; i >= 0; i--){ if (check(r, c, seq[i])) { row[r][seq[i]] = 1; column[c][seq[i]] = 1; square[r / 3 * 3 + c / 3][seq[i]] = 1; _list[r][c] = seq[i]; go(src+1); if (good)return; _list[r][c] = 0; row[r][seq[i]] = 0; column[c][seq[i]] = 0; square[r / 3 * 3 + c / 3][seq[i]] = 0; } } } } int main(){ for (int i = 0; i < 9; i++) for (int k = 0; k < 9; k++){ scanf("%d", &_list[i][k]); if (_list[i][k] != 0){ row[i][_list[i][k]] = 1; column[k][_list[i][k]] = 1; square[i / 3 * 3 + k / 3][_list[i][k]] = 1; } } go(0); if (!good) printf("no solution\n"); } ```