洛谷P2670 [NOIP2015 普及组] 扫雷游戏
要找到一个格子的周围格子包括其
上(0,1)、下(0,-1)、左(-1,0)、右(1,0)、
左上(-1,1)、右上(1,1)、左下(-1,-1)、右下(1,-1)
八个方向上与之直接相邻的格子,可以用两个数组dx[8]、dy[8]来搜索地地雷的位置
搜索到地雷之后在数组sum[ ][ ]相应的位置上自增。
#include<iostream>
using namespace std;
char map[105][105];
int sum[105][105];
int dx[8]={0,1,1,1,0,-1,-1,-1},dy[8]={1,1,0,-1,-1,-1,0,1};
int rows,list;
int main(){
cin>>rows>>list;
for(int i=1;i<=rows;i++){
for(int j=1;j<=list;j++){
cin>>map[i][j];
if(map[i][j]=='*'){
sum[i][j]=100;
}
}
}//输入地雷分布
for(int i=1;i<=rows;i++){
for(int j=1;j<=list;j++){
for(int k=0;k<8;k++){
if(map[i+dx[k]][j+dy[k]]=='*'&&i+dx[k]<=rows&&i+dx[k]>=1&&j+dy[k]<=list&&j+dy[k]>=1){
sum[i][j]++;
}
}
}
}
for(int i=1;i<=rows;i++){
for(int j=1;j<=list;j++){
if(sum[i][j]>=100){
cout<<"*";
}else cout<<sum[i][j];
}cout<<endl;
}
return 0;
}