This commit is contained in:
Zengtudor 2024-08-25 13:16:15 +08:00
parent f0ba77c0bb
commit 430d319200
3 changed files with 76 additions and 81 deletions

View File

@ -1,32 +1,76 @@
//NOT DONE
#include<bits/stdc++.h>
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
#define DB(code){code}
#define PV(v){cout<<#v<<" : "<<(v)<<endl;}
#else
#define DB(code)
#define PV(v)
#endif
int m[10][10];
// bool check_h[10][10],check_l[10][10],check_yx[20][10],check_zx[20][10];
// bool check_all(int x,int y,int num){
// if(check_h[x][num]){
// return false;
// }
// if(check_l[y][num]){
// return false;
// }
// if(check_yx[x-y+8][num]){
// return false;
// }
// if(check_zx[])
// }
void dfs(int x,int y);
optional<pair<int,int>> find_next(int x,int y);
int main(){
for(int i=1;i<=9;i++){
string str;
getline(cin,str);
for(int j=1;j<=9;j++){
if(str[j-1]=='.'){
m[i][j]=-1;
}else{
m[i][j]=str[j-1]-'0';
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){
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 j=1;j<=9;j++){
cout<<m[i][j];
@ -36,69 +80,19 @@ void dfs(int x,int y){
exit(0);
}
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.
*/

BIN
out.txt Normal file

Binary file not shown.

View File

@ -1,6 +1,7 @@
add_rules("mode.debug","mode.release")
if is_mode("debug") then
add_cxxflags("-O2","-DOI")
-- add_cxxflags("-O2","-DOI")
add_cxxflags("-DOI")
end
set_languages("c++17")