扫雷
扫雷
https://ac.nowcoder.com/acm/problem/22232
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <stack>
#define MAX 32767
using namespace std;
//全局变量
int DL[101][101];//0不存储 -1表示地雷
int n,m;
void AddNum(int i ,int j ){//附近非地雷的地方加上++
//上、下、左、右、左上、右上、左下、右下
//上 下 左 右
if(i-1>=1 && DL[i-1][j]!=-1 ) DL[i-1][j]++;
if(i+1<=n && DL[i+1][j]!=-1 ) DL[i+1][j]++;
if(j-1>=1 && DL[i][j-1]!=-1 ) DL[i][j-1]++;
if(j+1<=m && DL[i][j+1]!=-1 ) DL[i][j+1]++;
//左上、右上、左下、右下
if( i-1>=1 && j-1>=1 && DL[i-1][j-1]!=-1 ) DL[i-1][j-1]++;
if( i-1>=1 && j+1<=m && DL[i-1][j+1]!=-1 ) DL[i-1][j+1]++;
if( i+1<=n && j-1>=1 && DL[i+1][j-1]!=-1 ) DL[i+1][j-1]++;
if( i+1<=n && j+1<=m && DL[i+1][j+1]!=-1 ) DL[i+1][j+1]++;
}
int main()
{
//test();
//初始化
char temp;
cin>>n>>m;
//DL init
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
DL[i][j]=0;
getchar();
for(int i =1;i<=n;i++){ //回车符被吃掉了
for(int j =1; j<=m;j++){
scanf("%c",&temp);
if( temp =='*'){//This is a DL
DL[i][j]=-1; //-1 for DL
AddNum(i,j);
}
}
getchar();
}
for(int i =1;i<=n;i++){
for(int j =1; j<=m;j++){
if(DL[i][j]==-1)
cout<<"*";
else
cout<<DL[i][j];
}
cout<<endl;
}
return 0;
}