[2015年NOIP普及组] 扫雷游戏
[2015年NOIP普及组] 扫雷游戏
思路:现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。要开一个字符型的二维数组,输入,然后开计数器,找雷,记录,输出。
分析:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子,搜索时要都考虑到。
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char a[110][110]={0};//建立一个二维数组当雷区,赋初值
int n,m;
cin>>n>>m;//输入行、列
for(int i=1;i<=n;i++)//描述了雷区中的地雷分布情况
for(int k=1;k<=m;k++)
cin>>a[i][k];
for(int i=1;i<=n;i++)
{
for(int k=1;k<=m;k++)
{
if(a[i][k]!='*')//如果这不是地雷
{
int sum=0;//计数器,记录地雷个数
//开始四面八方扫雷
if(a[i-1][k-1]=='*') sum++;
if(a[i-1][k]=='*') sum++;
if(a[i-1][k+1]=='*') sum++;
if(a[i][k-1]=='*') sum++;
if(a[i][k+1]=='*') sum++;
if(a[i+1][k-1]=='*') sum++;
if(a[i+1][k]=='*') sum++;
if(a[i+1][k+1]=='*') sum++;
cout<<sum;//输出a[i][k]位置的地雷个数}
else//是地雷,直接输出
cout<<"*";
}
cout<<endl;//一行结束,换行
}
return 0;
}