爆搜水题
模拟扫雷,规则和扫雷一样
给出原图,求在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;
}
原文:http://blog.csdn.net/u011932355/article/details/41280483