dfs版;
要事先把不行的判掉?
UVA572 Oil Deposits
【题目大意】输入多个m行n列的矩阵,用00表示输入结束。找出有多少块石油区域,用“@”代表石油,假如两个“@”在横,竖或对角线上相邻,就说它们位于同一区域,对于每个输入,输出一个数表示有几个石油区域。
void dfs(int r, int c)
{
if(r < 0 || r >= n || c < 0 || c >= m) return; //"出界"的格子
if(idx[r][c] || pic[r][c] != '@') return; //不是"@"或者已经访问过的格子
idx[r][c] = 1; //连通分量编号
for (int i = 1;i <= 8;i++)
{
int tx = r + dx[i],ty = c + dy[i];
dfs(tx,ty);
}
}