2110: 扫雷
http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2110
2110: 掃雷
Time Limit:?1 Sec??Memory Limit:?128 MBSubmit:?88??Solved:?36
[Submit][Status][Web Board]
Description
掃雷游戲你一定玩過吧!現在給你若干個n×m的地雷陣,請你計算出每個矩陣中每個單元格相鄰單元格內地雷的個數,每個單元格最多有8個相鄰的單元格。 0<n,m<=100
?
Input
輸入包含若干個矩陣,對于每個矩陣,第一行包含兩個整數n和m,分別表示這個矩陣的行數和列數。接下來n行每行包含m個字符。安全區域用‘.’表示,有地雷區域用'*'表示。當n=m=0時輸入結束。
?
Output
對于第i個矩陣,首先在單獨的一行里打印序號:“Field #i:”,接下來的n行中,讀入的'.'應被該位置周圍的地雷數所代替。輸出的每兩個矩陣必須用一個空行隔開。
?
Sample Input
4 4 *... .... .*.. .... 3 5 **... ..... .*... 0 0Sample Output
Field #1: *100 2210 1*10 1110 Field #2: **100 33200 1*100HINT
?
?(注意兩個矩陣之間應該有一個空行,由于oj的格式化這里不能顯示出來)
數據規模和約定
0<n,m<=100
?
Source
算法提高
?
【代碼】:
#include <iostream> #include<cstdio> #include<cstring> using namespace std;int main() {int n,m;int cha[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{-1,1},{1,-1},{1,1}};char a[105][105];int cas=1;while(~scanf("%d%d",&n,&m),n&&m){memset(a,0,sizeof(a));for(int i=0;i<n;i++)scanf("%s",a[i]);for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(a[i][j] != '*'){a[i][j]='0'; //不是地雷的標記為0for(int k=0;k<8;k++) //八方向搜索 {int x=i+cha[k][0];int y=j+cha[k][1];if(a[x][y]=='*') //8方向只要有為雷a[i][j]++; //該坐標雷數++ }}}}printf("Field #%d:\n",cas++);for(int i=0;i<n;i++)printf("%s\n",a[i]);cout<<endl;}return 0; } View Code?
轉載于:https://www.cnblogs.com/Roni-i/p/8786572.html
總結
- 上一篇: 语文片断教学优秀教案一等奖
- 下一篇: 青椒苗