扫雷问题
#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;
}