1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| #include<bits/stdc++.h> #define ll long long #define pii pair<int,int> using namespace std; char arr[9][9],new_arr[9][9],input,var[9]={'R','O','Y','G','B','I','P','L','W'}; bool used_rect[9][128]; bool used_row[9][128]; bool used_col[9][128]; vector<pii> emp; int get_rect(int x,int y){ if(x<3){ if(y<3) return 0; else if(y<6) return 1; else return 2; } else if(x<6){ if(y<3) return 3; else if(y<6) return 4; else return 5; } else{ if(y<3) return 6; else if(y<6) return 7; else return 8; } } bool dfs(){ if(emp.empty()) return true; int x,y; tie(x,y)=emp.back(); emp.pop_back(); for(int i=0 ; i<9 ; i++){ if(!used_rect[get_rect(x,y)][var[i]] && !used_row[y][var[i]] && !used_col[x][var[i]]){ new_arr[x][y]=var[i]; used_rect[get_rect(x,y)][var[i]] = used_row[y][var[i]] = used_col[x][var[i]] = true; if(dfs()) return true; used_rect[get_rect(x,y)][var[i]] = used_row[y][var[i]] = used_col[x][var[i]] = false; new_arr[x][y]='*'; } } emp.emplace_back(x,y); return false; } int main(){ for(int i=0 ; i<9 ; i++){ for(int j=0 ; j<9 ; j++){ cin>>input; arr[i][j]=input; if(input=='*'){ emp.emplace_back(i,j); } used_rect[get_rect(i,j)][input]=true; used_row[j][input]=true; used_col[i][input]=true; } } dfs(); for(int i=0 ; i<9 ; i++){ for(int j=0 ; j<9 ; j++){ if(arr[i][j] == '*') cout<<new_arr[i][j]; } cout<<'\n'; } return 0; }
|