No Rules Rules

스도쿠 (feat. 백준, 2239번) 본문

생활/코테

스도쿠 (feat. 백준, 2239번)

개발하는 완두콩 2022. 10. 5. 12:25
728x90
반응형

스도쿠
https://www.acmicpc.net/problem/2239

 

2239번: 스도쿠

스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string.h>
using namespace std;
char arr[9][9];
bool row[9][10], column[9][10], rect[9][10];
void dfs(register int cnt){
    register int x = cnt / 9, y = cnt % 9;
    if(cnt == 81){
        for(x = 0; x < 9; ++x){
            for(y = 0; y < 9; ++y)
                cout << (int)arr[x][y];
            cout << "\n";
        }
        exit(0);
    }
    if(!arr[x][y]){
        for(register int i = 1; i <= 9; ++i)
            if(!row[x][i] && !column[y][i] && !rect[(x / 3) * 3 + (y / 3)][i]){
                row[x][i] = column[y][i] = rect[(x / 3) * 3 + (y / 3)][i] = true;
                arr[x][y] = i;
                dfs(cnt + 1);
                row[x][i] = column[y][i] = rect[(x / 3) * 3 + (y / 3)][i] = false;
                arr[x][y] = 0;
            }
    }
    else
        dfs(cnt + 1);
}
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    memset(row, false, sizeof(row));
    memset(column, false, sizeof(column));
    memset(rect, false, sizeof(rect));
    for(register int x = 0, y; x < 9; ++x)
        for(y = 0; y < 9; ++y){
            cin >> arr[x][y], arr[x][y] -= '0';
            if(arr[x][y])
                row[x][arr[x][y]] = column[y][arr[x][y]] = rect[(x / 3) * 3 + (y / 3)][arr[x][y]] = true;
        }
    dfs(0);
    return 0;
}
// *&)*@*

 

반응형

 

이전에 풀이했던 "스도쿠" 와 동일한 문제입니다.

스도쿠 (feat. 백준, 2580번) (tistory.com)

728x90
반응형
Comments