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;
}

posted @ 2010-08-28 23:05  菜到不得鸟  阅读(145)  评论(0)    收藏  举报