問題-Minesweeper(問題1096)にブルーブリッジカップのトレーニングソリューション

元の質問へのリンク:http://www.dotcpp.com/oj/problem1096.html

タイトル説明

マインスイーパ持っているあなたはマインスイーパ果たしましたか?このかわいいゲームは、その名の私たちが覚えていないことができ、特定のオペレーティング・システムが付属しています。ゲームの目標は、すべての鉱山がM X Nフィールド内に配置されている場所を見つけることです。ゲームショーその広場に隣接してありますどのように多くの鉱山がわかります広場に数。各正方形は、最大で8つの隣接する正方形を持っています。左の4×4のフィールドは`` *「」文字で表される2つの鉱山、それぞれが含まれています。我々は数字が上記のヒントで同じフィールドを表す場合は、右側のフィールドで終わる:
+
... ....
。+
... ....

+100
2210
1 + 10
1110
(本明細書によって"+"の代わりに"*"と""の代わりに"")

エントリー

入力フィールドの任意の数で構成されます。各フィールドの最初の行はそれぞれ、フィールドの行と列の数を表す二つの整数n及びm(0 <N、M <100)を含みます。次のn行の各フィールドを表す、正確M文字を含みます。安全な正方形で示されている.'' and mine squares by両方の引用符なし「」、*。最初のフィールドのラインN = M = 0は、入力の終了を示し、処理されるべきではありません。

輸出

各フィールドに対して、メッセージフィールド#Xを印刷:行に単独で、xは1から始まるフィールドの数を表し、ここで次のn行は ``を持つフィールドを含むべきである「」の文字が数によって置き換え。その広場に隣接して地雷。フィールドの出力の間に空行が存在する必要があります。

サンプル入力

4 4
+
... ....
。+
.. ....
3 5
++
... .....
。+ ...
0 0

サンプル出力

フィールド#1:
+100
2210
1 + 10
1110

フィールド#2:
++ 100
33200
1 + 100

問題解決のためのアイデア

ここで注目すべきは、編集者の質問のために、と私は理解することを望んで、プラス記号とアスタリスクポイントを置き、フルストップを交換するだけでなく、リンクを見て、それが元のタイトルがある(無修正)

  • ここでの主な問題は、あなたが翻訳ツール(鶏のための英語皿、例えば、I)の質問の意味について一般的な理解を使用することができ、英語を理解することです。
  • あなたはと呼ばれる小さなゲームのウィンドウで再生している必要があり、「地雷を掘ります。」このゲームの目的は、格子M * Nに地雷フィールド内のすべての地雷を見つけることです
    あなたを助けるために、このゲームは隣人のグリッドがありますどのように多くの鉱山がわかりますいくつかの非デジタル鉱山のグリッド、オンになります。
  • この質問は、各ポイントの周りの入力、出力のポイントどのように多くの鉱山(鉱山が鉱山として出力されます)を介して、各点は、加えて、周りの8人の隣人を持っているので、あなたは8を持っている隣人かを決定する必要がありますそれは、それがどのような条件を持っていたことができるかを決定するために使用することができますどのように多くの鉱山の周りにある、私は主にここにいます:
  • 与えられたポイントを介して、特定のバーコードを見て、その後、周囲8点を横断するように、所定の添加の座標との間の減算-1と1与えられました
参照コード(C ++の説明)
#include<iostream>
#include<cstdio>
using  namespace std;
char a[101][101];
int c(int dx, int dy, char a[][101]);
int n, m;
int main()
{

	cin >> n >> m;
	getchar();
	int t = 0, k,b = 1;
	while (n != 0 || m != 0)
	{
		t = 0;
		//输入操作 
		for (int i = 0; i < n; ++i)
		{
			for (int j = 0; j < m; ++j)
			{
				cin >> a[i][j];
			}
		}
		
		cout << "Field #" << b << ":" << endl;
		for (int i = 0; i < n; ++i)
		{
			for (int j = 0; j < m; ++j)
			{
				if (a[i][j] == '*') 
				{
					cout << '*';
				}
				else
				{
					k = c(i, j, a);
					cout << k;
				}
				++t;
				if (t % m == 0)
				{
					cout << endl;
				}


			}
		}
		cout << endl;
		cin >> n >> m;
		getchar();
		++b;
	}
	return 0;
}

int c(int dx, int dy, char a[][101])
{
	int count = 0;
	int p = 0, q = 0;
	for (int i = -1; i <= 1; ++i)
	{
		for (int j = -1; j <= 1; ++j)
		{
			p = dx + i;
			q = dy + j;
			if (p < 0 || p >= n || q < 0 || q >= m)
			{
				continue;
			}
			else
			{
				if (a[p][q] == '*')
				{
					++count;
				}

			}


		}
	}
	return count;
}

コアアルゴリズムます。https://blog.csdn.net/weixin_42792088/article/details/87907514

发布了19 篇原创文章 · 获赞 3 · 访问量 3814

おすすめ

転載: blog.csdn.net/weixin_42792088/article/details/86714024