본문 바로가기
개발자/알고리즘

[BOJ] 2580번 스도쿠

by D , 2019. 10. 15.
반응형


#include < iostream>
using namespace std;

int board[9][9];

bool c[9][10];
bool c2[9][10];
bool c3[9][10];

int square(int i,int j){
    return (i/3)*3+(j/3);
}

int n;

void go(int z){
    if(z==81){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cout<<board[i][j]<<" ";
            }
            cout<<endl;
        }
        exit(0);
    }

    int x = z/n;
    int y = z%n;

    if(board[x][y] !=0){
        go(z+1);
    }else{
        for(int i =1;i<10;i++){
            if(c[x][i] == false && c2[y][i] == false && c3[square(x,y)][i] == false){
                c[x][i] = c2[y][i] = c3[square(x,y)][i] = true;
                board[x][y] = i;
                go(z+1);
                c[x][i] = c2[y][i] = c3[square(x,y)][i] = false;
                board[x][y] = 0;
            }
        }
    }

}

int main(){
    n =9;
    for(int i=0;i<9;i++){
        for(int j=0;j<9;j++){
            cin>>board[i][j];

            if(board[i][j] != 0){
                c[i][board[i][j]] = true;
                c2[j][board[i][j]] = true;
                c3[square(i,j)][board[i][j]] = true;
            }
        }
    }

    go(0);

    return 0;
}

https://www.acmicpc.net/problem/2580

 

2580번: 스도쿠

스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루어진 정사각형 판 위에서 이뤄지는데, 게임 시작 전 몇 몇 칸에는 1부터 9까지의 숫자 중 하나가 쓰여 있다. 나머지 빈 칸을 채우는 방식은 다음과 같다. 각각의 가로줄과 세로줄에는 1부터 9까지의 숫자가 한 번씩만 나타나야 한다. 굵은 선으로 구분되어 있는 3

www.acmicpc.net

 

반응형

'개발자 > 알고리즘' 카테고리의 다른 글

[BOJ] 1987 알파벳  (0) 2019.10.16
[BOJ] 14889번 스타트와 링크  (0) 2019.10.13
[BOJ] 1339번 단어수학  (0) 2019.10.13
[BOJ] 1748번 수 이어 쓰기1  (0) 2019.10.13
[BOJ] 1261번 알고스팟 -deque  (0) 2019.10.12