蓝桥杯每周一题

本文介绍了扫雷游戏的规则,并给出了一个4x4的示例。文章还说明了输入和输出格式,以及如何处理输入数据。样例输入和输出展示了扫雷字段的表示方式及其解析方法。
摘要由CSDN通过智能技术生成

每周一题之2  Mineweep(扫雷)

Minesweeper (扫雷)
PC/UVa IDs: 110102/10189,
Popularity: A,
Success rate: high Level: 1

测试地址:https://vjudge.net/problem/UVA-10189

[问题描述]
Have you ever played Minesweeper? It’s a cute little game which comes within a certain Operating
System which name we can’t really remember. Well, the goal of the game is to find where are all the mines within a M × N field. To help you, the game shows a number in a square which tells you how many mines there are adjacent to that square. For instance, supose the following 4 × 4 field with 2 mines (which are represented by an ‘*’ character):
*...
....
.*..
....
If we would represent the same field placing the hint numbers described above, we would end up
with:
*100
2210
1*10
1110
As you may have already noticed, each square may have at most 8 adjacent squares.

[输入]
The input will consist of an arbitrary number of fields. The first line of each field contains two integers
n and m (0 < n, m ≤ 100) which stands for the number of lines and columns of the field respectively.
The next n lines contains exactly m characters and represent the field.
Each safe square is represented by an ‘.’ character (without the quotes) and each mine square
is represented by an ‘*’ character (also without the quotes). The first field line where n = m = 0
represents the end of input and should not be processed.

[输出]
对于每对整数 i 和 j,按原来的顺序输出 i 和 j,然后输出二者之间的整数中的最大循环节长度。这三个整数应该用单个空格隔开,且在同一行输出。对于读入的每一组数据,在输出中应位于单独的一行。


 

[样例输入]
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0

[样例输出]
Field #1:
*100
2210
1*10
1110

Field #2:
**100
33200
1*100
*/

 

每周一题解析:

#include "stdafx.h"
#include<iostream>
#include <string>
#include<queue>
#include<algorithm>
using namespace std;
int m, n;//N为行数,M为列数
int C = 1;//次数
char map[102][102];//扫雷地图
int b[101][101] = { 0 };
int main()
{
	while (cin>>n>>m)
	{
		if (m == 0 || n == 0)
		{
			C++;
				continue;
		}
		for (int i = 0; i < n; i++) {
			for (int  j = 0; j < m; j++)
			{
				cin >> map[i][j];
			}
		}
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (map[i][j] == '.')
				{
					if (map[i - 1][j] == '*') {
						b[i][j]++;
					}
					if (map[i + 1][j] == '*') {
						b[i][j]++;
					}
					if (map[i - 1][j-1] == '*') {
						b[i][j]++;
					}
					if (map[i - 1][j+1] == '*') {
						b[i][j]++;
					}
					if (map[i + 1][j-1] == '*') {
						b[i][j]++;
					}
					if (map[i + 1][j+1] == '*') {
						b[i][j]++;
					}
					if (map[i ][j-1] == '*') {
						b[i][j]++;
					}if (map[i ][j+1] == '*') {
						b[i][j]++;
					}
					map[i][j] = b[i][j] + '0';
				}
				else
				{
					continue;
				}
			}
		}
		cout << "Filed #" << C << endl;
		C++;
		for (int i = 0; i < n; i++)
		{
			for (int  j = 0; j < m; j++)
			{
				cout << map[i][j] ;
			}
			cout << endl;
		}
		cout << endl;
	}
	 
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值