B - Oil Deposits POJ - 1562
题意: 输入数据有多组,输入两个整数,表示数组的行和列,下面输出,一个二维的字符串数组,仅包含‘@’和 ‘*’ 两种字符,相邻的‘@’ 表示 同一个油田,求总共个几个油田。
这道题也是dfs 的很简单的题型,也是一个原始的模板。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 110
using namespace std;
char mapp[N][N];// 要搜索的地图
int m, n;
int fx[10] = {0, 0, 1, -1, 1, 1, -1, -1};
int fy[10] = {1, -1, 0, 0, 1, -1, -1, 1};
void dfs(int ax, int ay)
{
mapp[ax][ay] = '*';
for(int i = 0; i < 8; i++)
{
int x = ax + fx[i];
int y = ay + fy[i];
if(x >= 0 && x < m && y >= 0 && y < n && mapp[x][y] == '@')
dfs(x, y);
}
}
int main()
{
while(scanf("%d%d", &m, &n) && m+n)
{
int countt = 0;
for(int i = 0; i < m; i++)// 数据输入
scanf("%s", mapp[i]);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
if(mapp[i][j] == '@')
countt++, dfs(i, j);
cout<<countt<<endl;
}
return 0;
}