解题思路:这题还是比较简单,找个一个是地雷的位置,然后将从八个方向上的地雷数+1就好了,具体贴上代码。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=105;
char map[maxn][maxn];
int m,n;
//将当前位置的八个方向地雷数加1
void cnt(int x,int y) {
for(int i=-1; i<=1; i++) {
for(int j=-1; j<=1; j++) {
int dx=x+i;
int dy=y+j;
//如果移动到的位置是合法的
if(dx>=0&&dx<m&&dy>=0&&dy<n&&map[dx][dy]!='*') {
map[dx][dy]+=1;
}
}
}
}
void solution() {
//input map
for(int i=0; i<m; i++) {
gets(map[i]);
replace(map[i],map[i]+n,'.','0');
}
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(map[i][j]=='*') {
cnt(i,j);
}
}
}
for(int i=0; i<m; i++)
puts(map[i]);
}
int main() {
int k=0;
while(cin>>m>>n) {
cin.get();
if(!m&&!n) break;
if(k) cout<<"\n";
cout<<"Field #"<<++k<<":"<<endl;
solution();
}
return 0;
}