Uva 10189 Minesweeper 掃雷遊戲
阿新 • • 發佈:2018-12-09
解題思路:這題還是比較簡單,找個一個是地雷的位置,然後將從八個方向上的地雷數+1就好了,具體貼上程式碼。
#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn=105; char map[maxn][maxn]; int m,n; //將當前位置的八個方向地雷數加1 void cnt(int x,int y) { for(int i=-1; i<=1; i++) { for(int j=-1; j<=1; j++) { int dx=x+i; int dy=y+j; //如果移動到的位置是合法的 if(dx>=0&&dx<m&&dy>=0&&dy<n&&map[dx][dy]!='*') { map[dx][dy]+=1; } } } } void solution() { //input map for(int i=0; i<m; i++) { gets(map[i]); replace(map[i],map[i]+n,'.','0'); } for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(map[i][j]=='*') { cnt(i,j); } } } for(int i=0; i<m; i++) puts(map[i]); } int main() { int k=0; while(cin>>m>>n) { cin.get(); if(!m&&!n) break; if(k) cout<<"\n"; cout<<"Field #"<<++k<<":"<<endl; solution(); } return 0; }