diff --git "a/11\354\233\22423\354\235\274/\354\264\210\354\244\221\352\270\211/2276274_10971.c" "b/11\354\233\22423\354\235\274/\354\264\210\354\244\221\352\270\211/2276274_10971.c" new file mode 100644 index 0000000..283e24a --- /dev/null +++ "b/11\354\233\22423\354\235\274/\354\264\210\354\244\221\352\270\211/2276274_10971.c" @@ -0,0 +1,39 @@ +#include + +int N, w[10][10], v[10] = { 0 }, res = 0, tmp = 0; + +void bt(int i, int ii, int m) { + v[i] = 1; + for (int j = 0; j < N; j++) { + if (w[i][j] != 0 && v[j] == 0) { + tmp += w[i][j]; + bt(j, ii, w[i][j]); + } + } + for (int j = 0; j < N; j++) { + if (v[j] == 0) { + v[i] = 0; + tmp -= m; + return; + } + } + if (w[i][ii] == 0) { + v[i] = 0; + tmp -= m; + return; + } + tmp += w[i][ii]; + if (res == 0 || res > tmp) res = tmp; + v[i] = 0; + tmp -= m + w[i][ii]; +} + +int main() { + scanf("%d", &N); + for (int i = 0; i < N; i++) + for (int j = 0; j < N; j++) + scanf("%d", &w[i][j]); + for (int i = 0; i < N; i++) bt(i,i, 0); + printf("%d", res); + return 0; +} diff --git "a/11\354\233\22423\354\235\274/\354\264\210\354\244\221\352\270\211/2276274_2580.c" "b/11\354\233\22423\354\235\274/\354\264\210\354\244\221\352\270\211/2276274_2580.c" new file mode 100644 index 0000000..5e04bab --- /dev/null +++ "b/11\354\233\22423\354\235\274/\354\264\210\354\244\221\352\270\211/2276274_2580.c" @@ -0,0 +1,53 @@ +#include + +int cant = 0; + +void Sudoku(int sudoku[][9]) { + for (int row = 0; row < 9; row++) { // 행 돌리기 + for (int col = 0; col < 9; col++) { // 열 돌리기 + if (sudoku[row][col] == 0) { // 스도쿠[행][열]==0이면 + int num[10] = { 0 }; + for (int j = 0; j < 9; j++) { // 행 검사 + num[sudoku[row][j]] = 1; + } + for (int j = 0; j < 9; j++) { // 열 검사 + num[sudoku[j][col]] = 1; + } + for (int j = 0; j < 3; j++) { // 칸 검사 + for (int k = 0; k < 3; k++) { + num[sudoku[row / 3 * 3 + j][col / 3 * 3 + k]] = 1; + } + } + for (int j = 1; j <= 9; j++) { // 없는 수 삽입 + if (num[j] == 0) { + sudoku[row][col] = j; + Sudoku(sudoku); + if (cant == 1) { + sudoku[row][col] = 0; + cant = 0; + } + else return; + } + } + if (sudoku[row][col] == 0) { + cant = 1; + return; + } + } + } + } +} + +int main() { + int sudoku[9][9]; + for (int i = 0; i < 9; i++) + for (int j = 0; j < 9; j++) + scanf("%d", &sudoku[i][j]); + Sudoku(sudoku); + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) + printf("%d ", sudoku[i][j]); + puts(""); + } + return 0; +}