BFS初步的總結

2021-07-26 19:40:53 字數 1052 閱讀 8151



前幾天在markblain的帶領下學習了初步的bfs演算法,然後被逼著寫下這篇總結。

bfs全稱breadth first search,中文名廣度優先搜尋,又稱寬度優先搜尋,和dfs相對。通俗來說dfs是一條路走到底,而bfs就像是把一棟大廈一層一層搜尋。所以正如markblain所說,在做最優路徑(限定:結點到結點的耗費和深度成正比)的題時,廣度優先搜尋一般需要儲存所有結點所以耗費空間大,但找到最優解後直接輸出,耗時較短,深度優先搜尋不需要儲存所有結點,耗費空間較小但是有可能要將全域性都搜尋後再輸出最優解,所以耗時較長。因此,在做題時要考慮到空間限制問題和耗時問題,靈活選擇演算法(ps:我好像並沒有資格說這種話)。

說道bfs最簡單的題就是找最短路(題目鏈結這道題萌新的解法是用鄰接矩陣將相連的兩個結點儲存,然後用鍊錶模擬佇列記錄入隊的結點,按順序來遍歷結點如果找到了就遞迴輸出。這方法雖然比較笨,但是在oj上還是可以a的。下面附上**。

#include#include//f陣列記錄兩個結點是否相連, s陣列記錄結點是否已經入隊; 

int f[30][30],s[30];

struct node

;//搜尋最短路徑並輸出

void bfs(int x,int y)//x是起點y是終點

memset(s,0,sizeof(s));

int i,flag=0;

node *head=new node;//靜態鍊錶沒有學好,所以用動態鍊錶模擬佇列

node *p=head,*last=head;

last->data=x;

s[x]=1;

last->next=new node;

while(p->data!=-1)}}

if(flag) break;

p=p->next;//控制迴圈,不然直接死迴圈qaq

}if(flag)

} int main()

bfs(x,y);

}

然後就是營救、水缸灌水等題目,這些題目個人認為都是基於求最短路的基礎之上至於**,因為寫得太難看了就不貼了。

陣列的初步總結

陣列初始化的三種方式 靜態初始化 建立時就直接初始化所有元素 動態初始化 先宣告陣列,然後用到哪個再初始化哪個 預設初始化 每種不同型別的陣列,他都有預設的資料型別,同理陣列也有初始化的型別。public class array01 一次性給陣列所有元素賦值 概述1.陣列大小一經確定無法更改,也就是...

bfs思路總結

1 將初始狀態加入佇列 2 初始狀態出隊,進行節點擴充套件。可能是狀態轉移,列出狀態轉移方程 3 在進行擴充套件中,需要判斷節點不要重複擴充套件。基本思路是設立visited陣列,標記狀態是否被訪問過。將狀態用乙個整數表示,整數則可以是陣列下標,該陣列下標對應的陣列元素的值即是狀態是否被訪問的標誌。...

學習初步總結

字串查詢函式 char strchr char const str,int ch char strrchr char const str,int ch strchr 在字串 str 中查詢字元 ch 第一次出現的位置,找到後函式返回乙個指向該位置的指標。如果該字元並不存在與字串中,函式就返回乙個 n...