7. [2015年NOIP普及组] 扫雷游戏
一个简单的模拟
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<iomanip> 5 using namespace std; 6 int n,m; 7 char s[105][105]; 8 int map[105][105]; 9 int dx[10]={0,0,0,1,-1,1,1,-1,-1}; 10 int dy[10]={0,1,-1,0,0,1,-1,1,-1}; 11 bool pd(int x,int y) 12 { 13 if(x>=1&&y<=m&&x<=n&&y>=1) 14 return 1; 15 else return 0; 16 } 17 void find() 18 { 19 for(int i=1;i<=n;i++) 20 { 21 for(int j=1;j<=m;j++) 22 { 23 for(int k=1;k<=8;k++) 24 { 25 if(map[i][j]!=-1&&map[i+dx[k]][j+dy[k]]==-1&&pd(i+dx[k],j+dy[k])==1)//越界,别忘了i+和j+ 26 27 map[i][j]++; 28 } 29 } 30 } 31 } 32 int main() 33 { 34 cin>>n>>m; 35 for(int i=1;i<=n;i++) 36 { 37 for(int j=1;j<=m;j++) 38 { 39 cin>>s[i][j]; 40 if(s[i][j]=='?') map[i][j]=0; 41 else map[i][j]=-1; 42 } 43 44 // cout<<endl; 45 } 46 find(); 47 for(int i=1;i<=n;i++) 48 { 49 for(int j=1;j<=m;j++) 50 { 51 if(map[i][j]==-1)cout<<'*'; 52 else cout<<map[i][j]; 53 } 54 cout<<endl; 55 } 56 return 0; 57 58 }