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

POJ 2251 Dungeon Master 另一種 BFS 實現:隊列數組手寫版

     編輯:關於C++

題目同 4271,此處提供另一種手寫循環隊列實現

使用靜態數組模擬隊列,避免 STL queue 開銷,邏輯完全相同。

關鍵代碼片段

struct Node { int x, y, z; };
Node q[30*30*30];
int head = 0, tail = 0;

void push(Node n) { q[tail++] = n; }
Node pop() { return q[head++]; }
bool empty() { return head == tail; }

// BFS 主循環
push({sx, sy, sz});
map[sz][sy][sx] = '#';
int dist[35][35][35] = {0};
while (!empty()) {
    Node cur = pop();
    if (cur.x == ex && cur.y == ey && cur.z == ez) return dist[cur.z][cur.y][cur.x];
    for (int i = 0; i < 6; ++i) {
        int nx = cur.x + dx[i], ny = cur.y + dy[i], nz = cur.z + dz[i];
        if (in_bounds && map[nz][ny][nx] != '#') {
            map[nz][ny][nx] = '#';
            dist[nz][ny][nx] = dist[cur.z][cur.y][cur.x] + 1;
            push({nx, ny, nz});
        }
    }
}

對比說明

  • 手寫隊列在極大數據量下略快,但現代 STL queue 已高度優化,差異可忽略。
  • 邏輯核心完全一致:三維 BFS、六方向、訪問標記、距離記錄。
  • 本題數據規模小(≤27000 格),兩種寫法均瞬間通過。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved