hdu3316 Mine sweeping--DFS

来源:互联网 发布:mac 连不上appstore 编辑:程序博客网 时间:2024/06/15 09:12

原题链接: http://acm.hdu.edu.cn/showproblem.php?pid=3316


一:分析
一开始没看清题目意思,看了别人的代码才明白,直接看代码吧,很简单,是水题。


二:AC代码
#define _CRT_SECURE_NO_DEPRECATE #include <string>#include <iostream>#include <queue>using namespace std;int dir[8][2] = { { -1,0 },{ -1,1 },{ 0,1 },{ 1,1 },{ 1,0 },{ 1,-1 },{ 0,-1 },{ -1,-1 } };char ch[110][110];int num[110][110];int sx, sy;int n;int judge(int x, int y){int sum = 0;for (int i = 0; i < 8; i++)if (ch[x + dir[i][0]][y + dir[i][1]] == 'X')sum++;return sum;}void dfs(int x,int y){if (x < 0 || x >= n || y < 0 || y >= n)return;if (num[x][y] != -1)return;num[x][y] = judge(x, y);if (num[x][y] == 0){for (int i = 0; i < 8; i++)dfs(x + dir[i][0], y + dir[i][1]);}}int main(){while (~scanf("%d", &n)){memset(num, -1, sizeof(num));for (int i = 0; i < n; i++)scanf("%s", ch[i]);scanf("%d%d", &sx, &sy);if (ch[sx][sy] == 'X')printf("it is a beiju!\n\n");else{dfs(sx, sy);for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (num[i][j] == -1)printf(".");elseprintf("%d", num[i][j]);}printf("\n");}printf("\n");}}return 0;}






1 0
原创粉丝点击