update
This commit is contained in:
parent
f0ba77c0bb
commit
430d319200
@ -1,32 +1,76 @@
|
|||||||
//NOT DONE
|
|
||||||
#include<bits/stdc++.h>
|
#include<bits/stdc++.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
int m[10][10];
|
||||||
|
bool h_is_used[10][10],l_is_used[10][10],t_is_used[4][4][10];
|
||||||
|
|
||||||
#ifdef OI
|
#ifdef OI
|
||||||
#define DB(code){code}
|
#define DB(code){code}
|
||||||
|
#define PV(v){cout<<#v<<" : "<<(v)<<endl;}
|
||||||
#else
|
#else
|
||||||
#define DB(code)
|
#define DB(code)
|
||||||
|
#define PV(v)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int m[10][10];
|
void dfs(int x,int y);
|
||||||
// bool check_h[10][10],check_l[10][10],check_yx[20][10],check_zx[20][10];
|
optional<pair<int,int>> find_next(int x,int y);
|
||||||
// bool check_all(int x,int y,int num){
|
|
||||||
// if(check_h[x][num]){
|
int main(){
|
||||||
// return false;
|
for(int i=1;i<=9;i++){
|
||||||
// }
|
string str;
|
||||||
// if(check_l[y][num]){
|
getline(cin,str);
|
||||||
// return false;
|
for(int j=1;j<=9;j++){
|
||||||
// }
|
if(str[j-1]=='.'){
|
||||||
// if(check_yx[x-y+8][num]){
|
m[i][j]=-1;
|
||||||
// return false;
|
}else{
|
||||||
// }
|
m[i][j]=str[j-1]-'0';
|
||||||
// if(check_zx[])
|
h_is_used[i][m[i][j]]=true;
|
||||||
// }
|
l_is_used[j][m[i][j]]=true;
|
||||||
|
t_is_used[i/3+1][j/3+1][m[i][j]]=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DB(
|
||||||
|
for(int i=1;i<=9;i++){
|
||||||
|
for(int j=1;j<=9;j++){
|
||||||
|
cout<<m[i][j]<<"\t";
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
auto find = find_next(1, 1);
|
||||||
|
if(find.has_value()==false){
|
||||||
|
for(int i=1;i<=9;i++){
|
||||||
|
for(int j=1;j<=9;j++){
|
||||||
|
cout<<m[i][j];
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
dfs(find->first, find->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
optional<pair<int,int>> find_next(int x,int y){
|
||||||
|
for (int j=y+1; j<=9; j++) {
|
||||||
|
if(m[x][j]==-1){
|
||||||
|
return make_optional<pair<int,int>>({x,j});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=x+1;i<=9;i++){
|
||||||
|
for(int j=1;j<=9;j++){
|
||||||
|
if(m[i][j]==-1){
|
||||||
|
return make_optional<pair<int,int>>({i,j});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
// bool check(int x,int y,int num);
|
|
||||||
bool check(int x,int y,int num);
|
|
||||||
void dfs(int x,int y){
|
void dfs(int x,int y){
|
||||||
if(x==9&&y==9){
|
DB(PV(x)PV(y)cout<<endl;)
|
||||||
|
auto find = find_next(x, y);
|
||||||
|
if(find.has_value()==false){
|
||||||
for(int i=1;i<=9;i++){
|
for(int i=1;i<=9;i++){
|
||||||
for(int j=1;j<=9;j++){
|
for(int j=1;j<=9;j++){
|
||||||
cout<<m[i][j];
|
cout<<m[i][j];
|
||||||
@ -36,69 +80,19 @@ void dfs(int x,int y){
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
for(int i=1;i<=9;i++){
|
for(int i=1;i<=9;i++){
|
||||||
|
if(h_is_used[x][i]||l_is_used[y][i]||t_is_used[x/3+1][y/3+1][i]){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
h_is_used[x][i]=true,
|
||||||
|
l_is_used[y][i]=true,
|
||||||
|
t_is_used[x/3+1][y/3+1][i]=true;
|
||||||
|
m[x][y]=i;
|
||||||
|
|
||||||
|
dfs(find->first, find->second);
|
||||||
|
|
||||||
|
h_is_used[x][i]=false;
|
||||||
|
l_is_used[y][i]=false;
|
||||||
|
t_is_used[x/3+1][y/3+1][i]=false;
|
||||||
|
m[x][y]=-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(){
|
|
||||||
for(int i=1;i<=9;i++){
|
|
||||||
char ch[15];
|
|
||||||
cin.getline(ch,10);
|
|
||||||
for(int j=1;j<=9;j++){
|
|
||||||
if(ch[j-1]=='.'){
|
|
||||||
m[i][j]=-1;
|
|
||||||
}else{
|
|
||||||
m[i][j]=ch[j-1]-'0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DB(
|
|
||||||
for(int i=1;i<=9;i++){
|
|
||||||
for(int j=1;j<=9;j++){
|
|
||||||
cout<<m[i][j]<<" ";
|
|
||||||
}
|
|
||||||
cout<<endl;
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// void dfs(int x,int y){
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
bool check(int x,int y,int num){
|
|
||||||
for(int i=1;i<=9;i++){
|
|
||||||
if(m[i][y]==num){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int i=1;i<=9;i++){
|
|
||||||
if(m[x][i]==num){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int i=x+1,j=y+1;i<=9&&j<=9;i++,j++){
|
|
||||||
if(m[i][j]==num){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int i=x-1,j=y-1;i>=1&&j>=1;i--,j--){
|
|
||||||
if(m[i][j]==num){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
17.5..8..
|
|
||||||
.52.1....
|
|
||||||
.....759.
|
|
||||||
.8...94.3
|
|
||||||
.197.4..8
|
|
||||||
7......15
|
|
||||||
4.1...6..
|
|
||||||
3...2..59
|
|
||||||
...96..3.
|
|
||||||
*/
|
|
Loading…
Reference in New Issue
Block a user