题目链接:
解析:问有多少个“@”块。当中每一个块内的各个“@”至少通过八个方向之中的一个相邻。
直接从“@”的地方開始向相邻八个方向搜索,每搜到一个格子。就将它替换成“.”,一次搜索就会搜索完一个块,记录搜索的次数为答案。
AC代码:
#include#include #include using namespace std;char mz[110][110];const int dir[8][2] = {0, 1, 1, 0, 0, -1, -1, 0, 1, 1, -1, -1, 1, -1, -1, 1}; //八个方向int n, m;void dfs(int sx, int sy){ mz[sx][sy] = '.'; //搜到的位置替换成‘.’ for(int i=0; i<8; i++){ int x = sx + dir[i][0]; int y = sy + dir[i][1]; if(x >= 0 && x < n && y >= 0 && y < m && mz[x][y] == '@') dfs(x, y); } return ;}int main(){// freopen("in.txt", "r", stdin); while(scanf("%d%d", &n, &m) == 2 && n){ for(int i=0; i