題目連結: 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; | |
} |