按照本蒟蒻自己的理解廣度優先搜尋(以下稱bfs)是一種基於層數的搜尋方式,相較於深度優先搜尋(以下稱dfs),bfs的搜尋方式更類似於輻射狀而不是dfs一樣的線性搜尋。所以在實際的運用中,bfs在最短路問題以及覆蓋面積一類的問題中有著非常大的優勢。以下寫出一道bfs在最短路問題的應用。
題目描述:首先思考dfs的可行性,根據深度優先的原則,我們會優先搜尋當前節點可以到達的下乙個節點,直到搜尋到目標節點,返回長度值。粗略計算可得演算法複雜度會在o(n^k)(n代表城市數,k代表每個城市連線幾個城市)左右。本題資料範圍較小剪枝得當,也許可以ac,由於本蒟蒻相當之懶,剪枝技能炒雞辣雞,所以dfs演算法就不在這裡多贅述了。下圖表示的是從城市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
關於本題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 的值的設定應該相同。核取方塊 數學 語文 ...