I tried many test cases and the algorithm should be correct.
- Code: Select all
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int dx[]=new int[]{0,0,1,-1,-1,-1,1,1};
int dy[]=new int[]{1,-1,0,0,-1,1,-1,1};
int num=1;
int ln=0;
int a=0;
int b=0;
while(true){
String g;
String nums[];
if(ln>0)System.out.println();
ln++;
g=s.nextLine();
nums=g.split(" ");
a=Integer.parseInt(nums[0]);
b=Integer.parseInt(nums[1]);
if(a==0&&b==0)break;
int map[][]=new int[a][b];
for (int i = 0; i < a; i++) {
String str=s.nextLine();
for (int j = 0; j < b; j++) {
if(str.charAt(j)=='*'){
map[i][j]=-1;
}
}
}
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
int t=map[i][j];
if(t!=-1)continue;
for (int k = 0; k < 8; k++) {
int ii=i+dx[k];
int jj=j+dy[k];
if(ii<0||ii>=a||jj<0||jj>=b)continue;
if(map[ii][jj]!=-1){
map[ii][jj]++;
}
}
}
}
System.out.println("Field #"+num+":");
num++;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
if(map[i][j]!=-1)System.out.print(map[i][j]);
else System.out.print("*");
}
System.out.println();
}
}
}
}
