扫雷问题
#include<iostream>
#include<vector>
#include<iostream>
using namespace std;
int direct[8][2]={ {1,0}, {1,1}, {1,-1}, {0,1}, {0,-1}, {-1,0}, {-1,1}, {-1,-1} };
int main(){
int m, n, t=0;
while(1){
cin>>m>>n;
if(m==0&&n==0) break;
t++;
vector<vector<int> > g(m, vector<int>(n, 0));
char c;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++){
cin>>c;
if(c=='*') g[i][j]=-1;
}
for(int i=0; i<m; i++)
for(int j=0; j<n; j++){
int cnt=0;
if(g[i][j]==-1) continue;
for(int k=0; k<8; k++){
int a=i+direct[k][0], b=j+direct[k][1];
if(a<0||a>m-1||b<0||b>n-1) continue;
else if(g[a][b]==-1) cnt++;
}
g[i][j]=cnt;
}
if(t!=1) cout<<endl;
cout<<"Field #"<<t<<":"<<endl;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(g[i][j]==-1) cout<<"*";
else cout<<g[i][j];
}
cout<<endl;
}
}
return 0;
}