백준의 스도쿠(2239) 문제이다.
( 문제 바로가기 )
[ 문제풀이 ]
1) 사실 이전에 있는 문제인 스도쿠(2580) 문제와 다른 것이 없다. 왜 또 따로 이런 문제를 제출했는지 잘 모르겠다.
이 문제에 대한 전체적인 풀이는 스도쿠(2580) 글을 읽으면 알 수 있을 것이다.
[ 스도쿠(2580) 문제풀이 알아보기(Click) ]
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #include<iostream> #include<string> #define endl "\n" #define MAX 9 using namespace std; int MAP[MAX][MAX]; bool Row[MAX][MAX]; bool Col[MAX][MAX]; bool Square[MAX][MAX]; void Print() { for (int i = 0; i < MAX; i++) { for (int j = 0; j < MAX; j++) { cout << MAP[i][j]; } cout << endl; } } void Input() { for (int i = 0; i < 9; i++) { string Inp; cin >> Inp; for (int j = 0; j < Inp.length(); j++) { MAP[i][j] = Inp[j] - '0'; if (MAP[i][j] != 0) { Row[i][MAP[i][j]] = true; Col[j][MAP[i][j]] = true; Square[(i / 3) * 3 + (j / 3)][MAP[i][j]] = true; } } } //Print(); } void DFS(int Cnt) { int x = Cnt / MAX; int y = Cnt % MAX; if (Cnt == 81) { Print(); exit(0); } if (MAP[x][y] == 0) { for (int i = 1; i <= 9; i++) { if (Row[x][i] == false && Col[y][i] == false && Square[(x / 3) * 3 + (y / 3)][i] == false) { Row[x][i] = true; Col[y][i] = true; Square[(x / 3) * 3 + (y / 3)][i] = true; MAP[x][y] = i; DFS(Cnt + 1); MAP[x][y] = 0; Row[x][i] = false; Col[y][i] = false; Square[(x / 3) * 3 + (y / 3)][i] = false; } } } else DFS(Cnt + 1); } void Solution() { DFS(0); } void Solve() { Input(); Solution(); } int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen("Input.txt", "r", stdin); Solve(); return 0; } | cs |
'[ BOJ Code ] > # BOJ -' 카테고리의 다른 글
[ 백준 1965 ] 상자넣기 (C++) (0) | 2019.02.02 |
---|---|
[ 백준 1063 ] 킹 (C++) (2) | 2019.02.02 |
[ 백준 2225 ] 합분해 (C++) (4) | 2019.02.01 |
[ 백준 15654 , 15655 ] N과M(5) , N과M(6) (C++) (0) | 2019.02.01 |
[ 백준 11559 ] Puyo Puyo (C++) (0) | 2019.02.01 |