题目:https://projecteuler.net/problem=96
代码仅供参考
#include <bits/stdc++.h>
using namespace std;
int a[15][15];
//判断第x行第y个格子是否可以填n
bool canFill(int x,int y,int n){
for(int i=1;i<=9;i++){
if(a[x][i]==n)return false;
}
for(int i=1;i<=9;i++){
if(a[i][y]==n)return false;
}
int px,py;
if(x<=3)px=1;
else if(x<=6)px=4;
else px=7;
if(y<=3)py=1;
else if(y<=6)py=4;
else py=7;
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
if(a[px+i][py+j]==n)return false;
}
}
return true;
}
//搜索答案
bool dfs(){
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(a[i][j]!=0)continue;
for(int n=1;n<=9;n++)if(canFill(i,j,n)){
a[i][j]=n;
if(dfs())return true;
a[i][j]=0;
}
return false;
}
}
return true;
}
//输入
void input(){
string s;
cin>>s>>s;
for(int i=1;i<=9;i++){
cin>>s;
for(int j=0;j<=8;j++){
a[i][j+1]=s[j]-'0';
}
}
}
//输出
void output(){
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cout<<a[i][j]<<" \n"[j==9];
}
}
}
int main(){
int ans=0;
for(int i=1;i<=50;i++){
input();
dfs();
output();
ans+=a[1][1]*100+a[1][2]*10+a[1][3];
}
cout<<ans<<endl;
return 0;
}