-
#include<iostream> #include<cstdio> #include<cstdlib> #include<vector> #include<utility> #include<cstring> #include<cstdlib> using namespace std; int map[10][10]; vector<pair<int, int>> v; void go(int idx){ if(idx == v.size()){ for(int i = 1; i <= 9; i++){ for(int j = 1; j <= 9; j++){ printf("%d ", map[i][j]); } printf("\n"); } exit(0); } int r[10]; int c[10]; int cir[10]; memset(cir,0,sizeof(cir)); memset(r,0,sizeof(r)); memset(c,0,sizeof(c)); for(int i = 1; i <= 9; i++){ r[map[i][v[idx].second]] +=1; c[map[v[idx].first][i]] +=1; } int x=v[idx].first; int y =v[idx].second; if(y > 0 && y <=3 ){ if(x >=1 && x<= 3){ //1 for(int i = 1; i <= 3; i++){ for(int j = 1; j <= 3; j++){ cir[map[i][j]] +=1; } } } else if(x>3 && x<= 6){ for(int i = 4; i <= 6; i++){ for(int j = 1; j <= 3; j++){ cir[map[i][j]]+=1; } } } else if(x>6 && x<= 9){ for(int i = 7; i <= 9; i++){ for(int j= 1; j <= 3; j++){ cir[map[i][j]]+=1; } } } } else if(y> 3 && y<= 6){ if(x >=1 && x<= 3){ //1 for(int i = 1; i<= 3; i++){ for(int j = 4; j <= 6; j++){ cir[map[i][j]]+=1; } } } else if(x>3 && x<= 6){ for(int i = 4; i<= 6; i++){ for(int j = 4; j <= 6; j++){ cir[map[i][j]]+=1; } } } else if(x>6 && x<= 9){ for(int i =7; i<= 9; i++){ for(int j = 4; j <= 6; j++){ cir[map[i][j]]+=1; } } } } else if(y> 6 && y<=9){ if(x >=1 && x<= 3){ //1 for(int i =1; i<= 3; i++){ for(int j = 7; j <= 9; j++){ cir[map[i][j]]+=1; } } } else if(x>3 && x<= 6){ for(int i =4; i<= 6; i++){ for(int j = 7; j <= 9; j++){ cir[map[i][j]]+=1; } } } else if(x>6 && x<= 9){ for(int i =7; i<= 9; i++){ for(int j = 7; j <= 9; j++){ cir[map[i][j]]+=1; } } } } for (int i = 1; i <= 9; i++) { if (r[i] == 0 && c[i] == 0 && cir[i] == 0) { map[x][y] = i; go(idx + 1); map[x][y] = 0; } } } int main() { memset(map, 0, sizeof(map)); int k = 0; for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) { cin >> map[i][j]; if (map[i][j] == 0) v.push_back({i, j}); } } go(0); return 0; }
정말 시험에 나왔을때 해볼만한풀이