解題心得
因為沒有固定的起始點,所以這樣寫(?
程式碼
#include <iostream>
using namespace std;
char map[101][101];
bool isVisited[101][101] = { false };
int m, n;
void bfs(int x, int y, char c)
{
map[x][y] = 'x';
isVisited[x][y] = true;
int dx[8] = { -1,-1,-1,0,0,1,1,1 } , dy[8] = { -1,0,1,-1,1,-1,0,1 };
for (int i = 0; i < 8; i++)
{
int nextX = x + dx[i], nextY = y + dy[i];
if (nextX >= 0 && nextX < m && nextY >= 0 && nextY < n && map[nextX][nextY] == c && !isVisited[nextX][nextY])
bfs(nextX, nextY, c);
}
}
int main()
{
int counter = 1;
while (cin >> m >> n)
{
if (m == 0 && n == 0) break;
for (int i = 0; i < 101; i++)
for (int j = 0; j < 101; j++)
isVisited[i][j] = false;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> map[i][j];
int ans = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (map[i][j] == '@' && !isVisited[i][j])
bfs(i, j, '@'), ans++;
}
}
cout << ans << endl;
}
return 0;
}
沒有留言:
張貼留言