題目連結: https://zerojudge.tw/ShowProblem?problemid=c129

# 內容

有一家石油公司負責探勘某塊地底下的石油含量,這塊地是矩行的,並且為了探勘的方便被切割為許多小塊。然後使用儀器對每個小塊去探勘。含有石油的小塊稱為 一個 pocket。假如兩個 pocket 相連,則這兩個 pocket 屬於同一個 oil deposit。
你的任務就是要找出這塊地包含幾個不同的 oil deposit。

# 解題思路

開兩個二維陣列,一個紀錄圖形,另一個紀錄是否有走過,如果有油且未走過總是就加一。

# 程式碼

#include <iostream>
using namespace std;
int visited[100][100]={0};
char mp[100][100];
int r,c;
void dfs(int i,int j) {
    if(i<0||i>=r||j<0||j>=c||visited[i][j]==1||mp[i][j]=='*')
        return;
    visited[i][j]=1;
    dfs(i-1,j-1);
    dfs(i-1,j);
    dfs(i-1,j+1);
    dfs(i,j-1);
    dfs(i,j+1);
    dfs(i+1,j-1);
    dfs(i+1,j);
    dfs(i+1,j+1);
}
int main(){
    while(cin >> r >> c && r>0 && c>0) {
        int cnt=0;
        for(int i=0;i<r;i++)
            for(int j=0;j<c;j++) {
                cin >> mp[i][j];
                visited[i][j]=0;
            } 
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                if(mp[i][j]=='@'&&visited[i][j]==0){
                    dfs(i,j);
                    cnt++;
                }
            }
        }
        cout << cnt << endl;
    }
    return 0;
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay