信息学奥赛C++语言: 扫雷游戏
【題目描述】
掃雷游戲是一款十分經(jīng)典的單機(jī)小游戲。在 n 行 m 列的雷區(qū)中有一些格子含有地雷
(稱之為地雷格),其他格子不含地雷(稱之為非地雷格)。玩家翻開一個非地雷格時,該格將會出現(xiàn)一個數(shù)字——提示周圍格子中有多少個是地雷格。游戲的目標(biāo)是在不翻出任何地雷格的條件下,找出所有的非地雷格。
現(xiàn)在給出n行m列的雷區(qū)中的地雷分布,要求計算出每個非地雷格周圍的地雷格數(shù)。
注:一個格子的周圍格子包括其上、下、左、右、左上、右上、左下、右下八個方向上與之直接相鄰的格子。
【輸入】
輸入文件第一行是用一個空格隔開的兩個整數(shù)n和m,分別表示雷區(qū)的行數(shù)和列數(shù)。
接下來 n 行,每行 m 個字符,描述了雷區(qū)中的地雷分布情況。字符’*’表示相應(yīng)格子是地雷格,字符’?’表示相應(yīng)格子是非地雷格。相鄰字符之間無分隔符。
【輸出】
輸出文件包含 n 行,每行 m 個字符,描述整個雷區(qū)。用’*’表示地雷格,用周圍的地雷個數(shù)表示非地雷格。相鄰字符之間無分隔符。
【輸入樣例】
樣例1:
3 3
??
???
??
樣例2:
2 3
?*?
*??
【輸出樣例】
樣例1:
10
221
11
樣例2:
2*1
*21
代碼
#include<bits/stdc++.h> using namespace std; int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1}; int s[101][101]={0},n,m,ni,nj,a; char x[101][101]; int main() {cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++) x[i][j]=getchar();getchar();}for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(x[i][j]=='?')for(int k=0;k<8;k++){ni=i+dx[k];nj=j+dy[k];if(ni>=0&&ni<n&&nj>=0&&nj<m&&x[ni][nj]=='*') s[i][j]++;}for(int i=0;i<n;i++){for(int j=0;j<m;j++)if(x[i][j]=='*') putchar('*');else putchar(s[i][j]+48);putchar('\n');}return 0; }總結(jié)
以上是生活随笔為你收集整理的信息学奥赛C++语言: 扫雷游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通C++语言——1119:
- 下一篇: 信息学奥赛一本通C++语言——1040: