这题没什么好说的,可以借鉴的是读数据的方法。
#include <stdio.h>
int W, H;
char z[21][21];
int f(int x, int y){
if(x < 0 || x >= W || y < 0 || y >= H) // 如果走出矩阵范围
return 0;
if(z[x][y] == '#')
return 0;
else{
z[x][y] = '#'; // 将走过的瓷砖做标记
return 1 + f(x - 1, y) + f(x + 1, y) + f(x, y - 1) + f(x, y + 1);
}
}
void main()
{
int i, j, num;
while(scanf("%d %d", &H, &W) && W != 0 && H != 0){
num = 0;
for(i = 0; i < W; i++) // 读入矩阵
scanf("%s", z[i]);
for(i = 0; i < W; i++)
for(j = 0; j < H; j++)
if(z[i][j] == '@') printf("%d\n", f (i , j));
}
}