반응형
#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 |