【題解】ZeroJudge e550: 00722 – Lakes

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e550
【解題想法】BFS

  • 題目輸入要判斷的”water”位置的座標是one-based。
  • 此二維空間為矩形,長寬不大於99×99。每組測資第一行為一空白行。row number 不一定,讀到空白行為止。
#include <iostream>
#include <queue>
using namespace std;
#define pii pair<int,int>
#define F first
#define S second
int a[100][100];
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};

int main() {
    int T, R, C, r0, c0;
    string s;
    cin >> T;
    while (T--){
        cin >> r0 >> c0;
        r0--; c0--;
        getline(cin, s); // clear buffer
        R = 0;
        while (getline(cin, s) && s.size()){
            C = (int)s.size();
            for (int i = 0; i < C; i++)
                a[R][i] = s[i];
            R++;
        }
        queue <pii> q;
        q.push({r0, c0});
        a[r0][c0] = '*';
        int ans = 0;
        while (!q.empty()){
            pii now = q.front(); q.pop();
            ans++;
            for (int i = 0; i < 4; i++){
                int r = now.F + dx[i];
                int c = now.S + dy[i];
                if (r >= 0 && r < R && c >= 0 && c < C && a[r][c] == '0'){
                    a[r][c] = '*';
                    q.push({r, c});
                }
            }
        }
        cout << ans << "\n";
    }
    return 0;
}

分享本文 Share with friends