給你一塊地圖 ,其中' @ '代表探測到有油的地方, 而' * '則是代表沒有油的地方。 現在題目給出了油田的定義,所有連在一起的' @ ' 代表乙個油田, 而連在一起的定義是有公共點或公共邊。 而題目的要求是輸出給你一張地圖上的油田的個數。 思路: 這個題沒什麼特別的思路, 就是找到乙個初始的' @ ', 然後遍歷一遍,把與他屬於同乙個油田的都標記了,或者清楚。
思路:這個題目一般的方法就是深度遍歷。
但是我這裡用的是並查集。用了兩個小時,需要注意的地方
1. 如果使用%c輸入字元有問題,估計是處理了回車之類的,這裡適用gets或者流來輸入好點
2 兩個都是@的時候,如何表示左右、上下還有對角線,注意不要遺漏。
#include#include#include#includeusing namespace std;
#define nmax 105
char info[nmax][nmax];
vectorparent;
vectorirank;
int xx[8]=;
int yy[8]=;
setiset;
int main()
}}
for(int i=0;i=0&&newx=0&&newy-1&&!iset.count(root(i)))
//coutelse
parent[proot] = qroot;
}}
例題 油田(UVa 572)
輸入乙個m行n列的字元矩陣,統計字元 組成多少個八連塊。如果兩個字元 所在的格仔相鄰 橫豎或者對角線方向 就說他們屬於同乙個八連塊。sample input 1 1 3 5 sample output01 分析 dfs基礎題,典型題。用dfs找聯通塊 從每個 格仔出發,遞迴遍歷它周圍的 格仔。每次訪...
UVA 572 油田連通塊 並查集解決
題意 8個方向如果能夠連成一塊就算是乙個連通塊,求一共有幾個連通塊。分析 網上的題解一般都是dfs,但是今天發現並查集也可以解決,為了方便我自己理解大神的模板,便嘗試解這道題目,沒想到過了。1 include 2 include 3 include 4 include 5 include 6 inc...
uva572 油田 連通塊遍歷
的簡潔性需要注意小技巧 1.方向陣列。2.外麵包一層空氣防止判斷邊界。3.更改原來的陣列的狀態而不需要重新建立vis陣列 這樣會破壞原始資料,是乙個不好的習慣,但是這樣很靈活。include include define directsize 8 struct direct direct direc...