[2015年NOIP普及组] 扫雷游戏
设置位移数组dx和dy,在计算某格子周围的地雷数的时候遍历位移数组访问周围的格子,检查边界,统计周围有地雷的格子数
#include<iostream> char boom[500][500]; char dest[500][500]; bool bound(int x,int y,int n,int m) { return x>=0&&y>=0&&x<m&&y<n; } int dx[]={-1, 1, 0,-1, 1,-1, 1, 0}; int dy[]={-1,-1,-1, 0, 0, 1, 1, 1}; int round_boom(int x,int y,int n,int m) { int ret=0; for(int i=0;i<8;i++) { int nx=x+dx[i],ny=y+dy[i]; if(bound(nx,ny,n,m)&&boom[ny][nx]=='*') ret++; } return ret; } int main() { int n,m; std::cin>>n>>m; for(int y=0;y<n;y++) for(int x=0;x<m;x++) std::cin>>boom[y][x]; for(int y=0;y<n;y++) for(int x=0;x<m;x++) { if(boom[y][x]!='*')//不对有地雷的格子做统计 dest[y][x]=round_boom(x,y,n,m)+'0';//0到9的数转为一个表示此数字符型 else dest[y][x]=boom[y][x]; } for(int y=0;y<n;y++,std::endl(std::cout)) for(int x=0;x<m;x++) std::cout<<dest[y][x]; }