码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 3316 爆搜水题

时间:2014-11-19 14:14:26      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   for   on   2014   log   amp   as   

爆搜水题

模拟扫雷,规则和扫雷一样

给出原图,求在X,Y位置点一下以后的图形,没有弹出的点输出-1,弹出的点输出这个点的数字

从起始点DFS一下即可

#include "stdio.h"
#include "string.h"

int dir[8][2]={ {-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1} };
int n;
int hash[110][110];
char str[110][110];


int judge(int x,int y)
{
    int sum,i,xx,yy;
    sum=0;
    for (i=0;i<8;i++)
    {
        xx=x+dir[i][0];
        yy=y+dir[i][1];
        if (xx<0 || xx>=n || yy<0 || yy>=n) continue;
        if (str[xx][yy]=='X') sum++;
    }
    return sum;

}
void dfs(int x,int y)
{
    int sum,i;
    if (x<0 || y<0 || x>=n || y>=n) return ;
    if (str[x][y]=='X') return ;
    if (hash[x][y]!=-1) return ;

    sum=judge(x,y);
    hash[x][y]=sum;
    if (sum==0)
    {
        for (i=0;i<8;i++)
            dfs(x+dir[i][0],y+dir[i][1]);

    }
    else
    return ;
}
int main()
{
    int i,j,x,y;
    while (scanf("%d",&n)!=EOF)
    {
        for (i=0;i<n;i++)
            scanf("%s",str[i]);
        scanf("%d%d",&x,&y);
        if (str[x][y]=='X')
        {
            printf("it is a beiju!\n\n");
            continue;
        }

        memset(hash,-1,sizeof(hash));
        dfs(x,y);
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                if (hash[i][j]==-1) printf(".");
                else printf("%d",hash[i][j]);
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}


HDU 3316 爆搜水题

标签:blog   io   ar   for   on   2014   log   amp   as   

原文地址:http://blog.csdn.net/u011932355/article/details/41280483

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!