首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDU 1241 Oil Deposits:八方向 DFS/BFS 連通分量計數

     編輯:關於C++

題目大意

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),每格進棧/隊一次。
  • 遞迴深度 ≤ 10⁴,棧安全(或用 BFS 避免棧溢出)。
  • 輸入讀取:gets/fgets 讀整行,避免空白字符干擾。

總結

經典「八方向連通分量」入門題。核心是正確定義鄰域、邊界檢查、訪問標記。代碼極短,適合作為 DFS/BFS 模板練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved