首页 > 代码库 > HDU 3316 爆搜水题
HDU 3316 爆搜水题
爆搜水题
模拟扫雷,规则和扫雷一样
给出原图,求在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 爆搜水题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。