關於BFS的小節

2021-07-26 19:32:26 字數 2227 閱讀 7472

按照本蒟蒻自己的理解廣度優先搜尋(以下稱bfs)是一種基於層數的搜尋方式,相較於深度優先搜尋(以下稱dfs),bfs的搜尋方式更類似於輻射狀而不是dfs一樣的線性搜尋。所以在實際的運用中,bfs在最短路問題以及覆蓋面積一類的問題中有著非常大的優勢。以下寫出一道bfs在最短路問題的應用。

題目描述

下圖表示的是從城市a到城市h的交通圖。從圖中可以看出,從城市a到城市h要經過若干個城市。現給給出乙個城市的路線圖,並給出起點與終點,請給出最短的路線。

輸入

第一行三個數,分別是起點城市,目標城市,線路條數n。

接下來n行,每行兩個數字,表示這兩個城市之間有線路。

注意:輸入資料中1表示城市a,2表示城市b……(你應該知道資料範圍了吧?)

輸出

輸出路線一行,用->表示箭頭,具體格式見樣例。

樣例輸入

1 8 12

1 2

1 3

1 4

1 6

2 6

3 4

3 5

4 7

5 7

5 8

6 8

7 8

樣例輸出

a->f->h

首先思考dfs的可行性,根據深度優先的原則,我們會優先搜尋當前節點可以到達的下乙個節點,直到搜尋到目標節點,返回長度值。粗略計算可得演算法複雜度會在o(n^k)(n代表城市數,k代表每個城市連線幾個城市)左右。本題資料範圍較小剪枝得當,也許可以ac,由於本蒟蒻相當之懶,剪枝技能炒雞辣雞,所以dfs演算法就不在這裡多贅述了。

關於本題bfs的優勢就體現在,bfs搜尋方式是*按層搜尋一層一層逐步搜尋,所以搜尋到結果時,必定是最短路。粗略計算了一下,演算法複雜度會在o(nk)左右,比起dfs複雜度的指數級增長,這個複雜度感覺相當良心有木有?

由於本蒟蒻異常喜歡寫spfa,導致寫bfs時經常寫的很像spfa大佬、巨佬、神犇、巨友(這是什麼鬼??)見諒……

#include

#include

#include

#include

//對於懶的人,就要用懶的stl

using

namespace

std;

const

int maxn=27;

queue

s[maxn];//強行用佇列來存矩陣(表示對鍊錶深惡痛絕)

queue

que;

bool vis[maxn];

//dist是距離,last_point是儲存上乙個點的由來

int dist[maxn],last_point[maxn],n,a,b,u,point,start,end;

void search(int a)

search(last_point[a]);

printf("->%c",a+'a'-1);

return;

}int main()

//廣度優先搜尋

que.push(start);

vis[start]=true;

dist[start]=0;

while(!que.empty())}}

}search(end);

}

咳咳,**果然很醜,看來還是要提高志幾的恣肆水平……就這樣吧!寫的很爛,不要介意!

關於ios實現鍵盤隱藏的方法小節

大致有兩種方法來實現隱藏鍵盤 1 按下鍵盤的return 鍵實現隱藏 首先在標頭檔案中宣告類遵守 uitextfielddelegate 協議 然後在實現檔案中實現方法 bool textfieldshouldreturn uitextfield textfield 2.按下螢幕空白處實現隱藏 將x...

關於BFS 異或(C )

今天早上,我們做了場比賽,裡面有乙個題目是這樣的。隨著馬場的繁榮,出現了越來越多的新馬種。種族之間的溝通不暢嚴重影響了馬場的和諧。這時,科學家發明了馬語翻譯機械人,正好可以解決這一難題。機械人有 m 種,每種機械人能完成 k 個馬種之間的語言翻譯。問,利用這些機械人,能否實現 1 種群和 n 種群的...

html 表單的控制項小節

三種輸入框 文字框 密碼框 多行文字框 隱藏文字框 小節 除了多行文字框外,其他三種不同型別的文字框都是通過設定屬性 type 的值而達到型別不一樣的。選擇 通過按鈕的選擇 單選按鈕,舉例用在註冊資訊裡的選擇性別 女 男,需要注意的事,這裡的屬性 name 的值的設定應該相同。核取方塊 數學 語文 ...