m×n 網格(m, n ≤ 100),@ 表示有油,* 表示無油。八方向(水平、垂直、對角)相鄰的 @ 屬於同一油田。求油田總數。多測資,m=0 結束。
@,計數 +1,啟動 DFS/BFS 將其八鄰域所有 @ 標記訪問。dx[8] = {-1,-1,-1,0,0,1,1,1}, dy[8] = {-1,0,1,-1,1,-1,0,1}。0 ≤ x < m, 0 ≤ y < n。#include
#include
char grid[105][105];
bool vis[105][105];
int m, n;
int dx[8] = {-1,-1,-1,0,0,1,1,1};
int dy[8] = {-1,0,1,-1,1,-1,0,1};
void dfs(int x, int y) {
vis[x][y] = true;
for (int d = 0; d < 8; ++d) {
int nx = x + dx[d], ny = y + dy[d];
if (nx>=0 && nx=0 && ny
O(mn),每格進棧/隊一次。gets/fgets 讀整行,避免空白字符干擾。經典「八方向連通分量」入門題。核心是正確定義鄰域、邊界檢查、訪問標記。代碼極短,適合作為 DFS/BFS 模板練習。