深度優先搜尋 畢業BG

2021-07-07 11:13:01 字數 2199 閱讀 2532

深度優先搜尋就是通過遞迴對所有的點進行遍歷操作,同時對已經訪問的點進行標記,逐步進行。當發現有點已經被訪問過了的時候,則退回到上一層點,同時將標記點取消標記。另選乙個未曾訪問過的點重新開始,直到遍歷了所有的點。

oj題目

題目描述:

每年畢業的季節都會有大量畢業生發起狂歡,好朋友們相約吃散夥飯,網路

上稱為「bg

」。參加不同團體的

bg會有不同的感覺,我們可以用乙個非負整數

為每個bg

定義乙個「快樂度」。現給定乙個

bg列表,上面列出每個

bg的快樂度、

持續長度、bg

發起人的離校時間,請你安排一系列

bg的時間使得自己可以獲

得最大的快樂度。

例如有4場bg

:第1場快樂度為

5,持續

1小時,發起人必須在

1小時後離開;

第2場快樂度為

10,持續

2小時,發起人必須在

3小時後離開;

第3場快樂度為

6,持續

1小時,發起人必須在

2小時後離開;

第4場快樂度為

3,持續

1小時,發起人必須在

1小時後離開。

則獲得最大快樂度的安排應該是:先開始第3

場,獲得快樂度

6,在第

1小時結

束,發起人也來得及離開;再開始第2

場,獲得快樂度

10,在第

3小時結束,

發起人正好來得及離開。此時已經無法再安排其他的bg

,因為發起人都已經離

開了學校。因此獲得的最大快樂度為16。

注意bg

必須在發起人離開前結束,你不可以中途離開一場

bg,也不可以中途加

入一場bg

。又因為你的人緣太好,可能有多達30

個團體bg

你,所以你需要寫個程式來解決這個

時間安排的問題。

輸入:測試輸入包含若干測試用例。每個測試用例的第1

行包含乙個整數

n (<=30)

,隨後有n

行,每行給出一場

bg的資訊:

h l t

其中 h 

是快樂度,

l是持續時間(小時),

t是發起人離校時間。資料保證l不

大於t,

因為若發起人必須在

t小時後離開,

bg必須在主人離開前結束。 當n

為負數時輸入結束。

輸出:

每個測試用例的輸出佔一行,輸出最大快樂度。

樣例輸入: 3

6 3 3

3 2 2

4 1 3 4

5 1 1

10 2 3

6 1 2

3 1 1 -1

樣例輸出: 7

16

對於這道題目,可以採用dfs

來解決。首先我們要知道離校時間

t必須要大於持續時間,那麼當我們參加一場後,剩餘時間就是

t-l 

,則參加的下一場持續時間必須要小於 

t-l 

例如對於

h l t    t-l

6 3 3    0

3 2 2    0

4 1 3    2

當參加第一場後,持續時間是3

,而沒有任何一場的

t-l能夠大於等於

3,所以最後就只能參加一場宴會,產生結果是

6.而若是從第二場開始參加,花費時間是

2,因為剩餘時間

t-l中能夠大於等於

2只有第三場

(也就是說如果我們參加了第三場,就還有時間可以參加第二場),所以參加者兩場的歡樂度總和是7

,與只參加第一場的

6相比,就可以得出最大結果。對於第三場的情況也是這麼分析的。

#include #include int a[30][4], n, id[30];

int sum, max;

void dfs(int time)

{ for(int i=0; i=time && id[i]==0) //遍歷規則

{sum += a[i][0];

id[i]=1; //標記點

if(max=0)

{for(int i=0; i

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋 廣度優先搜尋

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...