題目
Description
Input
Output
Sample Input
Sample Output
代碼
#include <iostream>
#include <cstdio>
using namespace std;
//輸入
int m, n;
const int MAXN = 105;
char field[MAXN][MAXN];
//現在的位置(x,y)
void dfs(int x, int y)
{
//將現在的位置替換爲*
field[x][y] = '*';
//循環遍歷八個方向
for(int i = -1; i <= 1; i++)
{
for(int j = -1; j <= 1; j++)
{
int nx = x + i, ny = y + j;
//判斷(nx,ny)是否在區域內,以及是否有@
if(0<=nx&&nx<m&&0<=ny&&ny<n&&field[nx][ny]=='@')
{
dfs(nx, ny);
}
}
}
}
void solve()
{
int ans = 0;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
//從有@的地方開始dfs
if(field[i][j]=='@')
{
dfs(i, j);
ans++;
}
}
}
printf("%d\n", ans);
}
int main()
{
//freopen("input.txt", "r", stdin);
while(scanf("%d%d", &m, &n))
{
getchar();
if(n == 0 && m == 0) break;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
/*我發現cin能夠忽略回車的,前後兩個getchar()都可以不要
而用scanf就必須要兩個getchar(),否則出錯
*/
//cin >> field[i][j];
scanf("%c", &field[i][j]);
}
getchar();
}
solve();
}
return 0;
}