1. 問題描述
2. 思路及實現**
1. 問題描述
某石油公司發現了乙個油田。該油田由n*m個單元組成的矩形,有些單元裡有石油,有些則沒有。單元油田可以通過上,下,左或右連通。在乙個單元油田裡架設一台採油機,它可以把和該單元油田相連的單元油田的石油採完。該公司想知道最少需要架設幾台採油機能把所有的石油採完?
示例輸入:
2 2
@*2 2
@@@@
示例輸出:
2. 思路及實現**
廣度優先搜尋演算法實現。
//廣度優先搜尋演算法
#include
<
iostream
>
#include
<
stack
>
#include
<
utility
>
using
namespace
std;
intmain()
stack
<
pair
<
int,
int>
>
context;
intfirst, second;
for(
inti =0
; i
<
rows;
++i)
for(
intj =0
; j
<
lines;
++j)
//沒有標記過,並且是油田
//標記
//flag[i][j] = 2;
oils
++;
//增加數量
context.push(make_pair(i, j));
//棧不空
while(!
context.empty())
if( ( (second -1
) >=0)
&&(map[first][second -1
] =='@
') &&(
!flag[first][second -1
]))if
( ( (first +1
) <
rows )
&&(map[first +1
][second] =='
@') &&(!
flag[first +1
][second]) )
if( ( (second +1
) <
lines )
&&(map[first][second +1
] =='@
') &&(
!flag[first][second +1
]))}
}cout
<<
oils
<<
endl;
return0;
Oil Deposits(油田問題)
題意 找出地圖上的油層數,每個油層由多個油藏組成,這些油藏相鄰,常規的搜尋問題,每次向八個方向搜尋油藏。此處為dfs include include include include using namespace std intm,n char mp 105 105 void dfs int a,i...
問題 C 油田問題
題目描述 輸入乙個m行n列的字元矩陣,統計字元 組成多少個八連塊。如果兩個字元 所在的格仔相鄰 橫 豎或者對角線方向 即屬於同乙個八連塊。輸入多組輸入 輸入行數m,以及列數n。然後輸入 和 1 n,m 100 輸出聯通塊個數 就是將a陣列進行操作,把整個矩陣都遍歷一遍,在每次進行計算時都從是 開始進...
基礎搜尋題 油田合併 深度搜尋
某石油公司發現了乙個油田。該油田由n m個單元組成的矩形,有些單元裡有石油,有些則沒有。單元油田可以通過上,下,左或右連通。在乙個單元油田裡架設一台採油機,它可以把和該單元油田相連的單元油田的石油採完。該公司想知道最少需要架設幾台採油機能把所有的石油採完?輸入 先輸入2個正整數n,m 1 n,m 5...