pku 2612 Mine Sweeper(水题)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 12
const int dir[8][2]={ {-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1} };
char grid[MAXN][MAXN],player[MAXN][MAXN],ans[MAXN][MAXN];
int n;
void solve()
{
int i,j,k;
bool flag=false;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(player[i][j]=='x' && grid[i][j]=='*')
{
flag=true;
break;
}
}
if(flag) break;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(player[i][j]=='x')
{
int mines=0;
for(k=0;k<8;k++)
{
int x=i+dir[k][0];
int y=j+dir[k][1];
if(x<0 || y<0 || x>=n || y>=n) continue;
if(grid[x][y]=='*') mines++;
}
ans[i][j]=mines+'0';
}
}
}
if(flag)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(grid[i][j]=='*')ans[i][j]='*';
}
}
}
}
int main()
{
int i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=0; i<n; i++)
for(j=0;j<n;j++)
ans[i][j]='.';
for(i=0; i<n; i++) scanf("%s",grid[i]);
for(i=0; i<n; i++) scanf("%s",player[i]);
solve();
for(i=0; i<n; i++) printf("%s\n",ans[i]);
}
return 0;
}
浙公网安备 33010602011771号