洛谷P2670 扫雷游戏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷P2670 扫雷游戏相关的知识,希望对你有一定的参考价值。

题目描述

扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。

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

注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。

输入输出格式

输入格式:

 

输入文件第一行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。

接下来n行,每行m个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。

 

输出格式:

 

输出文件包含n行,每行m个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。

 

输入输出样例

输入样例#1:
3 3
*??
???
?*?
输出样例#1:
*10
221
1*1
输入样例#2:
2 3
?*?
*??
输出样例#2:
2*1
*21

说明

对于 100%的数据, 1≤n≤100, 1≤m≤100。

 

蒟蒻的理解:

  虽然是NOIP普及的题目,但是还是很水的,连深搜都算不上,只能算个普通的搜索;

  基本思路:

  二维数组输入,然后循环挨个判断所有反向,如果有一个方向为‘*’,那么计数器加1,最后输出计数器。。。。/超级笨的方法!!!

  献上丑码:QAQ

  var n,m,i,j,s:longint;   

      a:array[0..1000,0..1000] of char;
begin        
   readln(n,m);   
   for i:=1 to n do begin   
     for j:=1 to m do    
       read(a[i,j]);
       readln;
    end;   //以上都是输入雷的阵型
    for i:=1 to n do    
      for j:=1 to m do    
      if a[i,j]=‘*‘ then write(a[i,j]) else begin   //如果当前这个位置就是雷,就输出本身否则就。。。(往下看)
        s:=0;   
        if a[i-1,j-1]=‘*‘ then s:=s+1;    
        if a[i-1,j]=‘*‘ then s:=s+1;    
        if a[i-1,j+1]=‘*‘ then s:=s+1;    
        if a[i,j-1]=‘*‘ then s:=s+1;     
        if a[i,j+1]=‘*‘ then s:=s+1;     
        if a[i+1,j-1]=‘*‘ then s:=s+1;    
        if a[i+1,j]=‘*‘ then s:=s+1;     
        if a[i+1,j+1]=‘*‘ then s:=s+1;    //以上都是判断上下左右。。。等题目上说的所有方位的语句,如果发现一个雷那么就计数
        write(s);    //输出
      end;  
      writeln;  
   end;
end.

技术分享

  

 









以上是关于洛谷P2670 扫雷游戏的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

P2670 [NOIP2015 普及组] 扫雷游戏

P2670 扫雷游戏

Luogu P2670 扫雷游戏

多文件实现扫雷