(NOIP2015第二题)扫雷(mine)
来源:互联网 发布:java内嵌机制 编辑:程序博客网 时间:2024/06/08 01:20
2. 扫雷游戏
(mine.cpp/c/pas)
扫雷游戏是一款十分经典的单机小游戏。在 n行 m 列的雷区中有一些格子含有地雷
(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
【输入格式】
输入文件名为 mine.in。
输入文件第一行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。
接下来 n行,每行m 个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。
【输出格式】
输出文件名为 mine.out。
输出文件包含 n 行,每行 m 个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。
【输入输出样例 1】
mine.in
mine.out
3 3
*??
???
?*?
*10
221
1*1
见选手目录下的 mine/mine1.in和 mine/mine1.ans。
【输入输出样例 2】
mine.in
mine.out
2 3
?*?
*??
2*1
*21
见选手目录下的 mine/mine2.in和 mine/mine2.ans。
【输入输出样例 3】
见选手目录下的 mine/mine3.in和 mine/mine3.ans。
【数据说明】 对于 100%的数据,1≤n≤100,1≤m≤100。
不难看出,根据范围,这是一道二维数组的问题。
好了,这又是一道对于刚学二维数组的萌新很难,对于某些大神很简单的题……
算法如下(算法中有些细节作者在下面会讲):
1.输入n,m。做个双重循环,外层1到n,里层1到m。(外层m,里层n也是一样的)
2.每次输入一个字符(不是字符串,就是字符)如果这个字符是‘*’,把当前a【i,j】置为-1(a是二维数组),并在四周找不是-1的数,找到一个,把那个不是-1的数加1
3.将a输出
这里讲一些细节,为了优化,作者没有为了输入多弄一个字符型数组,而是直接把判断和输入放在了一起。
判断四周,也就是判断a【i-1,j-1】a【i-1, j】a [i-1,j+1] a [i,j-1] a[i,j+1]……等等。
有细心的盆友会说,这里会越界,所以我们把数组设到0到101乘0到101就可以了,这样就免了特殊值判断。
另外,把a【i,j】置为-1就是为了表示这是炸弹。
程序如下:
var
a:array[0..101,0..101] of integer;
b:char;
i,j,l,n,m,x,y,h:longint;
begin
assign(input,'mine.in');
reset(input);
assign(output,'mine.out');
rewrite(output);
readln(n,m);
for x:=1 to n do
begin
for y:=1 to m do
begin
read(b);
if b='*'
then begin
a[x,y]:=-1;
for l:=-1 to 1 do
begin
for j:=-1 to 1 do
begin
if a[x+l,y+j]<>-1
then inc(a[x+l,y+j]);
end;
end;
end;
end;
readln;
end;
for i:=1 to n do
begin
for j:=1 to m do
begin
if a[i,j]=-1
then write('*')
else write(a[i,j]);
end;
writeln;
end;
close(input);
close(output);
end.
- (NOIP2015第二题)扫雷(mine)
- [BZOJ1088][SCOI2005]扫雷Mine(dp)
- bzoj 1088: [SCOI2005]扫雷Mine (枚举+判定)
- 1006: Mine Sweeper(扫雷)
- [SCOI2005]扫雷Mine
- BZOJ 1088 扫雷Mine
- bzoj1088 [SCOI2005]扫雷Mine
- bzoj1088 [SCOI2005]扫雷Mine
- [BZOJ1088][SCOI2005]扫雷Mine
- BZOJ1088: [SCOI2005]扫雷Mine
- BZOJ 1088 扫雷Mine
- 【SCOI2005】【BZOJ1088】扫雷Mine
- bzoj1088[SCOI2005]扫雷Mine
- [BZOJ1088] 扫雷游戏mine
- BZOJ1088: [SCOI2005]扫雷Mine
- [SCOI2005]扫雷Mine
- [SCOI2005]扫雷Mine
- bzoj1088[SCOI2005]扫雷Mine
- 使用Spring报错:No default constructor found;
- Android C++和JAVA互相调用
- Android Studio 优秀插件汇总
- HBase与Hive整合的必要性
- 折半枚举(双向搜索)poj27854 Values whose Sum is 0
- (NOIP2015第二题)扫雷(mine)
- 初学常用命令(二)
- Linux设备树, .dtb文件
- 敌兵布阵||HDU1166
- poj 2533 最长上升子序列 多种姿势
- AMD发布专用挖矿驱动
- java源码阅读之LinkedBlockingQueue
- JAVA学习笔记_request请求转发_response重定向
- shell备份上传脚本