题目描述:

扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。

现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。

注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。

输入格式:

第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n <= 100, 1 <= m <= 100。
接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符。

输出格式:

n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。

样例输入:

3 3
*??
???
?*?

样例输出:

*10
221
1*1 思路:二维数组。注意八个增量。 上代码:
#include<bits/stdc++.h>
using namespace std;
char a[][];
int b[][];
int x[]={,-,-,,,,,,-};//增量,其实就是上下左右、左上、右上、左下、右下四个方向的坐标
int y[]={,,,,,,-,-,-};
int main(){
int n,m;
cin>>n>>m;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
cin>>a[i][j];
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if(a[i][j]=='*'){
for(int k=;k<=;k++){//八个方向扫一遍,不用增量也可以的
int x1=i+x[k], y1=j+y[k];
if (a[x1][y1]!='*') b[x1][y1]++;
}
}
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
if (a[i][j]=='*')cout<<"*";
else cout<<b[i][j];
}
cout<<endl;
}
return ;
}
												

最新文章

  1. 常用的sublime text插件(很爽哦)
  2. MySQL的安装与配置
  3. 【11-01】Sublime text 学习笔记
  4. 网页FLASH幻灯片播放带链接源代码 pixviewer.swf使用(转)
  5. [翻译][MVC 5 + EF 6] 3:排序、过滤、分页
  6. 观察者模式:猫叫鼠跑人醒(C#)
  7. Everything中文绿色版在Win7/8/10用不了问题的图文教程,只显示盘符
  8. JS 添加到事件的多个对象
  9. 映射请求到Servlet
  10. C#连接ACCESS的一个问题
  11. SIFT
  12. mktime性能问题调查
  13. DIV+CSS布局命名规范
  14. YII关联字段并带搜索排序功能
  15. java----回文序列判断java
  16. 【面试】Python面试题库
  17. 教你如何制作饼干icon教程
  18. iOS 怎样更新APP
  19. vs.net使用技巧
  20. springboot自定义配置文件

热门文章

  1. [转] 【iOS基础知识】之判断NSString是否为整数、浮点数
  2. 微信小程序-工具无法加载本地模拟开发服务的解决办法
  3. Ubuntu英文版中无法输入中文标点符号的问题
  4. v$sql、v$sqlarea、v$sqltext、v$sql_plan
  5. Centos 6.x 安装 Redis
  6. 《SQL 进阶教程》 case:练习题1-1-1 多列数据的最大值
  7. mysql issue:
  8. Datagridview强制结束编辑状态
  9. X Samara Regional Intercollegiate Programming Contest DIV2
  10. [干货分享]AXURE整套高保真UI框架和元件组(白色风格)