廣搜的優化技巧

2022-02-19 21:51:39 字數 1884 閱讀 8302

一、雙向佇列bfs:

首先乙個很神奇的小乾貨:

雙端對列duque!

雙端佇列中的元素可以從兩端彈出

常用操作(感覺超級超級複雜):

(1)    建構函式

deque():建立乙個空deque

deque(int nsize):建立乙個deque,元素個數為nsize

deque(int nsize,const t& t):建立乙個deque,元素個數為nsize,且值均為t

deque(const deque &):複製建構函式

(2)    增加函式

void push_front(const t& x):雙端佇列頭部增加乙個元素x

void push_back(const t& x):雙端佇列尾部增加乙個元素x

iterator insert(iterator it,const t& x):雙端佇列中某一元素前增加乙個元素x

void insert(iterator it,int n,const t& x):雙端佇列中某一元素前增加n個相同的元素x

void insert(iterator it,const_iterator first,const_iteratorlast):雙端佇列中某一元素前插入另乙個相同型別向量的[forst,last)間的資料

(3)    刪除函式

iterator erase(iterator it):刪除雙端佇列中的某乙個元素

iterator erase(iterator first,iterator last):刪除雙端佇列中[first,last)中的元素

void pop_front():刪除雙端佇列中最前乙個元素

void pop_back():刪除雙端佇列中最後乙個元素

void clear():清空雙端佇列中最後乙個元素

(4)    遍歷函式

reference at(int pos):返回pos位置元素的引用

reference front():返回首元素的引用

reference back():返回尾元素的引用

iterator begin():返回向量頭指標,指向第乙個元素

iterator end():返回指向向量中最後乙個元素下乙個元素的指標(不包含在向量中)

reverse_iterator rbegin():反向迭代器,指向最後乙個元素

reverse_iterator rend():反向迭代器,指向第乙個元素的前乙個元素

(5)    判斷函式

bool empty() const:向量是否為空,若true,則向量中無元素

(6)    大小函式

int size() const:返回向量中元素的個數

int max_size() const:返回最大可允許的雙端對了元素數量值

(7)    其他函式

void swap(deque&):交換兩個同型別向量的資料

void assign(int n,const t& x):向量中第n個元素的值設定為x

雙向佇列bfs:

適用範圍:

邊權值為可能有,也可能沒有(由於 bfs 適用於權值為 1 的圖,所以一般是 0 or 1),或者能夠轉化為這種邊權值的最短路問題。

實現:一般情況下,我們把沒有權值的邊擴充套件到的點放到隊首,有權值的邊擴充套件到的點放到隊尾。這樣即可保證在整個佇列中,像普通 bfs 一樣,越靠近隊首,權值越小,且權值零一之間有分隔。

模板:

while

(佇列不為空)

}

2.雙向寬度搜尋:(看懂不會寫悄咪咪)

從狀態圖上起點和終點同時開始進行寬度/深度優先搜尋,如果發現相遇了,那麼可以認為是獲得了可行解。

3.hash 判重(沒有看懂悄咪咪)

廣搜的優化

其實主要的思想與深搜類似 放兩個題吧 這個題思想很好 一開始我都不知道qwq include include include include include using namespace std const int n 300000 int t,r,c,n intdis n p n cnt boo...

廣搜優化題目總結

題面 這道題之前打過,但那時候打題太水了,沒有真正掌握這道題的知識點。果然我還是太蒻了 這道題的解法是先建邊,對於每乙個單位正方形,將有邊相連的兩個對角建一條長度為0的無向邊,另外兩個對角建一條長度為1的無向邊。然後可以跑最短路或者用雙端佇列bfs 0 1bfs 跑最短路的話要注意由於是網格圖spf...

pku1184很有技巧的廣搜

題意 有乙個六位數,開始游標在第一位數上,現在通過向左,右移動游標,將游標上的數加,減一,與第一,五個數交換這幾個操作變為另乙個數 游標在任何地方都滿足 求最少的運算元。分析 開始想雙向廣搜,狀態為6 10 6個狀態,和單向廣搜是一樣的,會超時。後面想的幾種優化發現根本就不叫優化。最後還是看了dis...