|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <iostream>
using namespace std;
char a[15][15];
int yu[15][15];
int ans[15][15];
int n, m;
bool checkk(int x, int y){
return yu[x][y] == (ans[x][y] + ans[x-1][y] + ans[x-1][y-1] + ans[x-1][y+1] + ans[x][y+1] + ans[x][y-1] + ans[x+1][y] + ans[x+1][y+1] + ans[x+1][y-1]);
}
bool check(int x, int y){
for(int i=1;i<=x-2;i++){
for(int j=1;j<=m;j++){
if(yu[i][j] == -1)
continue;
else if(!checkk(i, j)){
return false;
}
}
}
if(x >= 2){
for(int i=1;i<=m-2;i++){
if(yu[x-1][i] == -1){
continue;
}
else if(!checkk(x-1, i)){
return false;
}
}
}
return true;
}
void dfs(int x, int y){
if(x == n+1){
if(check(x, y)){
for(int i=n-1;i<=n;i++){
for(int j=1;j<=m;j++){
if(yu[i][j] == -1){
continue;
}
else if(!checkk(i, j)){
return;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout << ans[i][j];
}
cout << endl;
}
return;
}
}
if(!check(x, y)){
return;
}
ans[x][y] = 0;
if(y < m){
dfs(x, y+1);
}
else{
dfs(x+1, 1);
}
ans[x][y] = 1;
if(y < m){
dfs(x, y+1);
}
else{
dfs(x+1, 1);
}
ans[x][y] = a[x][y] - '0';
}
int main(){
cin >> n >> m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> a[i][j];
if(a[i][j] == '_'){
yu[i][j] = -1;
}
else{
yu[i][j] = a[i][j] - '0';
}
}
}
dfs(1, 1);
return 0;
}
|
|