# 題目: UVa 10189 - Minesweeper
# 題目說明
給你 n * m
的矩形,並告訴你地雷的位置 (*),求完成後踩地雷
INPUT:
每筆測資輸入兩個整數 n
與 m
,代表範圍
接下來輸入 n * m
個字元
OUTPUT:
輸出完成後的踩地雷圖
# 解題方法
一個一個字元讀取,當遇到 *
時,將其位置 -10
,以他為中心的九宮格全部 +1
最後為負數則輸出 *
,其餘直接輸出
# 參考程式碼
#include <iostream> | |
#include <memory.h> | |
using namespace std; | |
int main() | |
{ | |
ios::sync_with_stdio(false); | |
cin.tie(nullptr); | |
cout.tie(nullptr); | |
int n, m, cases = 0; | |
char ch; | |
int G[102][102]; | |
while (cin >> n >> m, n && m) | |
{ | |
memset(G, 0, sizeof(G)); | |
for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) | |
{ | |
cin >> ch; | |
if (ch == '*') | |
{ | |
G[i][j] -= 10; | |
for (int x = i - 1; x <= i + 1; ++x) for (int y = j - 1; y <= j + 1; ++y) | |
{ | |
++G[x][y]; | |
} | |
} | |
} | |
cout << (cases ? "\n" : "") << "Field #" << ++cases << ":\n"; | |
for (int i = 1; i <= n; ++i) | |
{ | |
for (int j = 1; j <= m; ++j) | |
G[i][j] >= 0 ? cout << G[i][j] : cout << "*"; | |
cout << "\n"; | |
} | |
} | |
return 0; | |
} |