基礎鞏固2訓練小結

2021-06-29 14:21:41 字數 1467 閱讀 1266

本週的基礎鞏固2訓練了基礎資料結構:佇列,鍊錶,樹,圖,以及dfs和bfs演算法等。下面總結一下一些需要注意的地方。

資料結構結構基礎中樹是乙個難點,因為樹的定義就是遞迴的,因此解決和樹有關的問題總是從遞迴的思想上去考慮。樹的結構中最常見的是二叉樹,二叉樹自身有很多獨特的數學特性,因此題目中經常見到這種樹,比如本次訓練的e題,利用的就是二叉樹葉子結點i的深度depth與總結點數的關係:1《先解決邊界問題——遍歷到葉子結點時,處理完及時返回,然後再遞迴處理左子結點和右子結點。對於四分樹,處理方法類似。另外,經常遇到的一種題型是從遍歷的序列中構造出來原來的樹。比如本次訓練的f題,就是要求將四分樹轉換為十進位制序列和十進位制序列構造出四分樹。

資料結構中的圖涉及了第一次學習時不常遇見的內容:拓撲排序和尤拉迴路。本次訓練的b題就是一道典型的用尤拉道路解決的問題。關於尤拉道路,要根據結論來程式設計解決:對於無向圖,度數為奇數的結點不能超過2個;如果有2個,那麼其中乙個的入度比出度小1,另乙個的入度比出度大1。因此解決這類問題時要從結點的度數取考慮。比如這次訓練的i題,需要找到一條路徑,必須包含指定的m條路徑。如果試圖去構造一條符合題意的道路肯定是比較麻煩的,應當先判斷指定的m條路徑中有多少個連通分量,統計這些連通分量中度數為奇數的點,只需要將它們額外擴充套件一條路徑即可,考慮到對稱性和出入結點的度數為奇數,最後總結出需要增加的路徑數是e+(res-2)/2。拓撲排序的乙個重要作用是判斷有向圖中是否含有有向環,本次訓練的c題,要求判斷給定的n種正方形能否組成乙個無限大的結構。通過觀察我們會發現,如果可以的話,其中必然有一些正方形要迴圈出現,以往內給定的正方形種類是有限多的。而正方形的重複出現意味著連線點的重複出現,意味著連線點構成了乙個有向環。這樣就將乙個看似複雜的,無從下手的問題轉變為了簡單的拓撲排序問題。

關於dfs,它經常用於搜尋連通塊。本次訓練的a題是一道非常好的聯絡dfs的題目,給了你6種埃及象形符號的編碼後的,讓你找出其中包含了哪些象形符號。一方面需要觀察出這6中符號各自獨有的特徵,即他們包含的洞的個數是不同的。然後就是利用dfs來找洞的個數。不過要注意先處理邊界,就像剪貼畫一樣,先把周圍的輪廓勾勒出來,然後再精加工,即尋找每個符號中洞的個數。在寫dfs的**時,要注意這些問題:首先先處理遞迴邊界,及時返回非法的情況,然後標記該結點,防止重複訪問,最後利用向量陣列向外圍遞迴擴充套件。如果一道題中需要多種dfs,可以考慮新增乙個控制引數isp,便於針對不同的情況進行不同的處理,簡化**。dfs的作用是簡單的,但要學會靈活運用,對於「連通塊」的選取要根據情況而轉移,比如本次訓練的d題就是這樣的一道題,乙個正方形中有若干個圓形障礙物,問你是否存在從正方形左邊界到達正方形右邊界的一條通路,如果有,輸出最靠北邊的入口和出口。如果我們把正方形中除去圓的部分看做待搜尋的連通塊,顯然我們會遇到乙個大問題:邊界不好處理,因為圓有很多,你很難確定這一點進入了哪個圓的範圍內。加入我們換個角度考慮,把圓看待搜尋的連通塊物件,那麼問題就會大大簡化,如果從上邊界可以和下邊界連通,那麼必然不存在合法的路徑。而圓向外擴充套件只需要判斷這n個圓中,哪些與當前的圓相切或相交即可。

本次訓練的這些資料結構是後面更高階的資料結構的基礎,因此在往後訓練中,還應當繼續加強鞏固。

PTA 基礎鞏固2

4 2 多項式求值 15分 本題要求實現乙個函式,計算階數為n,係數為a 0 a n 的多項式f x i 0 n a i x i 在x點的值。double f int n,double a,double x 其中n是多項式的階數,a中儲存係數,x是給定點。函式須返回多項式f x 的值。include...

dfs鞏固訓練

按順序從上往下刷即可!知識點 關於環形的陣列,前移動和後移動可能會溢位下標。解決方法是,轉移後的座標公式為 原座標 改變量 陣列長度 陣列長度 易錯點 寫搜尋時候,有時候會出現這樣的錯誤,還請注意 include include include using namespace std const i...

bfs鞏固訓練

按順序從上往下刷即可!知識點 關於環形的陣列,前移動和後移動可能會溢位下標。解決方法是,轉移後的座標公式為 原座標 改變量 陣列長度 陣列長度 易錯點 寫搜尋時候,有時候會出現這樣的錯誤,還請注意 include include include using namespace std const i...