hdu 1241
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1241
题意:跟2952一样,只不过多加了四个方向。
mark:多加了四个方向之后,遍历的时候不用打表了,可以直接枚举。
代码:
#include <stdio.h> char a[110][110]; int m,n; void ss(int x, int y) { int i,j,xx,yy; a[x][y] = '1'; for(i = -1; i < 2; i++) for(j = -1; j < 2; j++) { xx = x+i; yy = y+j; if(xx < 0 || xx >= m) continue; if(yy < 0 || yy >= n) continue; if(a[xx][yy] != '@') continue; ss(xx, yy); } } int main() { int i,j,sum; while(scanf("%d%d", &m, &n), m) { for(i = 0; i < m; i++) scanf("%s", a+i); for(i = sum = 0; i < m; i++) for(j = 0; j < n; j++) if(a[i][j] == '@') { sum++; ss(i, j); } printf("%d\n", sum); } return 0; }