C++:: boj 2580 < 스도쿠 >

jahlee·2023년 12월 15일
0

백준_골드

목록 보기
10/24
post-thumbnail

구현하여 dfs 를 돌면서 다 완성했다면 출력해주는 문제이다. 크게 어렵지 않아 보이지만 생각보다 구현하기 까다롭다.

#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> board(9, vector<int>(9));

bool isAble(int x, int y, int num) {
    for (int i=x-x%3; i<x-x%3+3; i++) {
        for (int j=y-y%3; j<y-y%3+3; j++) {
            if (board[i][j] == num) return false;
        }
    }
	for(int i=0; i<9; i++) {
        if(board[x][i] == num || board[i][y] == num) return false;
    }
    return true;
}

void sudoku(int x,int y) {
    if (x==9) {
        for (int i=0; i<9; i++) {
            for (int j=0; j<9; j++) {
                cout << board[i][j] << " ";
            }
            cout << "\n";
        }
        exit(0);
    }
	if (y==9) {
		sudoku(x+1,0);
	} else if (board[x][y]==0) {
        for(int i=1; i<=9; i++) {
            if (isAble(x, y, i)) {
                board[x][y] = i;
                sudoku(x, y+1);
                board[x][y] = 0;
            }
        }
    }
    else {
		sudoku(x,y+1);
	}
}

int main() {
    for (int i=0; i<9; i++) {
        for (int j=0; j<9; j++) {
            cin >> board[i][j];
        }
    }
    sudoku(0,0);
    return 0;
}

0개의 댓글