1. 程式人生 > >Uva 10189 Minesweeper 掃雷遊戲

Uva 10189 Minesweeper 掃雷遊戲


解題思路:這題還是比較簡單,找個一個是地雷的位置,然後將從八個方向上的地雷數+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;
}