uva 572 Oil Deposits(DFSエルゴード)
2540 ワード
Oil Deposits
The GeoSurvCorp geologic survey compmpany reponsible for detecting undedededededededededededededededededeposits. GeoSurvCompp works with onelargrectanglar region of ladatime,and creates a gridaaaadededededededededededededededededededestststststaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar or not the plot contains oil.
A plot containing oil is caled a pocket.If two pockets are adjacent,then the y are parts of the same oil deposit.Oil deposits can be quite large and may conin numerous pockets.Your jois to determineroinent
Input
The input file contains one or more grids.Each grid begins with a line containing
m
and
n
the number of rows and columns in the grid,separated by a single space.If
m
= 0 it signals the end of the input;others wise
and
Following this are
m
LINE of
n
characters each(not counting the end-off-line characters).Each character corecter cores ponds to one plot,and is ether`
*
'representing the absence of oil,or
@
'representing an oil pocket.
Output
For each grid、output the number of distinct oil deposits.Two different pockets are parts of the same oil deposit if the y are horizontally、vertically、or diagonally.Anoil deposit witter nopockle
Sample Input
問題解決の考え方:遍歴して、「@」に出会うと、その位置と隣にある「@」がすべて「*」になり、採集されたのと同じです.
The GeoSurvCorp geologic survey compmpany reponsible for detecting undedededededededededededededededededeposits. GeoSurvCompp works with onelargrectanglar region of ladatime,and creates a gridaaaadededededededededededededededededededestststststaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar or not the plot contains oil.
A plot containing oil is caled a pocket.If two pockets are adjacent,then the y are parts of the same oil deposit.Oil deposits can be quite large and may conin numerous pockets.Your jois to determineroinent
Input
The input file contains one or more grids.Each grid begins with a line containing
m
and
n
the number of rows and columns in the grid,separated by a single space.If
m
= 0 it signals the end of the input;others wise
and
Following this are
m
LINE of
n
characters each(not counting the end-off-line characters).Each character corecter cores ponds to one plot,and is ether`
*
'representing the absence of oil,or
@
'representing an oil pocket.
Output
For each grid、output the number of distinct oil deposits.Two different pockets are parts of the same oil deposit if the y are horizontally、vertically、or diagonally.Anoil deposit witter nopockle
Sample Input
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
Sample Output 0
1
2
2
油田を代表して、途中でどれぐらいの油田があるかを判断します.問題解決の考え方:遍歴して、「@」に出会うと、その位置と隣にある「@」がすべて「*」になり、採集されたのと同じです.
#include
#include
#define N 105
char map[N][N];
int n, m, cnt;
const int dir[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
void DFS(int a, int b){
map[a][b] = '*';
for (int i = 0; i < 8; i++){
if (a + dir[i][0] < 0 || a + dir[i][0] >= n) continue;
if (b + dir[i][1] < 0 || b + dir[i][1] >= m) continue;
if (map[a + dir[i][0]][b + dir[i][1]] == '*') continue;
DFS(a + dir[i][0], b + dir[i][1]);
}
}
int main(){
while (scanf("%d%d%*c", &n, &m), n && m){
// Init.
memset(map, 0, sizeof(map));
cnt = 0;
// Read.
for (int i = 0; i < n; i++)
gets(map[i]);
// Handle.
for (int i = 0; i < n; i ++){
for (int j = 0; j < m; j++){
if (map[i][j] == '@'){
DFS(i, j);
cnt++;
}
}
}
printf("%d
", cnt);
}
return 0;}