백준의 스도쿠(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

+ Recent posts