0063扫雷

Description

 

扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0<n,m<=100

Input

 

输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m,分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用'*'表示。当n=m=0时输入结束。

Output

 

对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的'.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。

(注意两个矩阵之间应该有一个空行,由于oj的格式化这里不能显示出来)

Sample Input 1 

4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0

Sample Output 1

Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100

Hint

HINT:时间限制:1.0s 内存限制:256.0MB

0<n,m<=100

#include<stdio.h>
#define MAX 100
int fun(char M[MAX][MAX],int n, int m, int i, int j) {  //当前点不是雷时,判断当前点周围雷的个数 
 int num=0;
 //当前点周围即 i-1 ~ i+1,j-1 ~ j+1 ,(这里遍历了当前区域的9个点,包含当前点(肯定不是雷)) 
 for(int a=i-1;a<=i+1;a++) {
  for(int b=j-1;b<=j+1;b++) {
   if(a>=0 && b>=0 && a<n && b<m && M[a][b]=='*') {  //注意做边界判断  
    num++;
   }
  }
 }
 return num; 
}
int main()
{
 int n,m,count=1;  
 while(scanf("%d %d",&n,&m)==2 && n && m ) {
  char Mines[MAX][MAX];  
  int i,j;
  for(i=0;i<n;i++) {   //注意一下二维字符数组的输入方式 
   scanf("%s",Mines[i]);
  }
  if(count>1) printf("\n");  //添加这一行代码测试才会AC,不加这一行状态会为Presentation erro,不太理解。。。 
  printf("Field #%d:\n",count);
  //遍历二维数组 
  for(i=0;i<n;i++) {
   for(j=0;j<m;j++) {
    if(Mines[i][j]=='.') {  //如果不是雷,执行fun函数返回当前点周围的雷的个数 
     printf("%d",fun(Mines,n,m,i,j));
    }
    if(Mines[i][j]=='*'){  //如果是雷,直接输出* 
     printf("*");
    }
   }
   printf("\n");
  } 
  count++;
 }
 return 0;
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值