FZU 1056扫雷游戏

来源:互联网 发布:java获取list泛型类型 编辑:程序博客网 时间:2024/05/18 09:19

Description

扫雷是Windows自带的游戏。游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。

你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。

*....... “*”表示有地雷.*.. “.”表示无地雷....
经过处理应得到
*10022101*101110

Input

输入有多组数据,每组数据的第一行有两个数字,m,n(0<m,n<100)表示游戏中雷区的范围为m×n。接下来m行每行有n个字符。“*” 表示有地雷,“.”表示无地雷。最后一组数据m=0,n=0表示输入结束,不需要处理。

Output

对于每组输入数据,输出结果,各方块数字间不留空格。每组结果之后有一个空行。

Sample Input

2 3
***
...
4 4
*...
....
.*..
....
0 0

Sample Output

***
232

*100
2210
1*10
1110
统计周围的雷数,简单题
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1e2+5;int T,n,m,f[maxn][maxn],ans[maxn][maxn];char s[maxn];int a[8]={1,1,1,-1,-1,-1,0,0};int b[8]={1,-1,0,1,-1,0,1,-1};int main(){while (~scanf("%d%d",&n,&m),n+m){memset(f,0,sizeof(f));memset(ans,0,sizeof(ans));for (int i=1;i<=n;i++){scanf("%s",s+1);for (int j=1;j<=m;j++) if (s[j]=='*') f[i][j]=1;}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){for (int k=0;k<8;k++){ans[i][j]+=f[i+a[k]][j+b[k]];}}}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){if (f[i][j]) printf("*");else printf("%d",ans[i][j]);}printf("\n");}printf("\n");}return 0;}


0 0
原创粉丝点击