题目描述
扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
输入输出格式
输入格式:
输入文件第一行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。
接下来n行,每行m个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。
输出格式:
输出文件包含n行,每行m个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。
代码:
#include <stdio.h>
#include <string.h>
int n,m,i,j,s[1000][1000],l=1;
char a[1000][1000];
int main()
{scanf("%d %d",&n,&m);for(i=1;i<=n;i++)scanf("%s",&a[i]);for(i=1;i<=n;i++){for(j=0;j<m;j++){if(a[i][j]=='*'){s[i-1][j-1]++;s[i-1][j]++;s[i-1][j+1]++;s[i][j-1]++;s[i][j+1]++;s[i+1][j-1]++;s[i+1][j]++;s[i+1][j+1]++;}}}for(i=1;i<=n;i++){for(j=0;j<m;j++){if(a[i][j]=='*')printf("*");elseprintf("%d",s[i][j]);}puts("");}return 0;
}
扫雷这个游戏大家都玩过,当点到一个格子时,要么显示是雷区,要么显示一个数字,这个数字则表示他周围八个格子里的地雷个数。
扫雷的界面相当于一个矩阵,也就自然的想到了建立两个二维数组,分别用于储存输入数据和将输出的数据。
当读入到的数据表示是雷的时候,它的相应输出相邻八个位置都要加一。