PTA習題解析 判斷DFS序列的合法性

2022-03-08 23:08:22 字數 2943 閱讀 2392

目錄情景解析

注意事項

模擬驗證

**實現

主函式

6 9

0 10 2

0 32 1

3 24 2

1 42 5

4 54

0 1 4 2 5 3

0 2 5 1 4 3

0 2 3 1 4 5

3 2 5 1 4 0

yes

yesno

yes

也就是說,對於頂點而言我們並不關心頂點的順序,因為這是乙個一對多的關係,我們沒有手法去強行規定他們的先後序。因此對於圖結構的 dfs,可能會產生不只乙個的結果序列,例如從 0 號頂點出發,「 0 1 4 2 5 3 」 和 「 0 2 5 1 4 3 」都可以認為是正確的序列。

從上文所述,我們明白了這道題是不能夠直接去 dfs 得到序列進行單模匹配的,也就是說不能用單純的驗證法去證明序列的正誤。什麼樣的思路是可行的?正著做不行那就反著來,用反證法來實現,即我假設給出的序列是正確的,那麼我按照你的序列來遍歷應當是正確的,如果能夠完成遍歷那就說明序列正確,若在任何乙個地方發生錯誤以至於無法 dfs,那就說明序列錯誤。

根據分析,我稱之為「定向的 dfs」,即我雖然是按照 dfs 的模式去找這個序列,但是我的操作是受限的——根據給出的順序遍歷。因此我根據往下深度搜尋時需要把已知的序列傳遞下去,為了使得提取邊的資訊更為方便,我選擇鄰接矩陣來儲存圖結構。

由於要模擬 dfs,我們還是要使用遞迴,由於資料是受限的,因此遞迴的介面的正確性需要保證。這裡給出 2 個卡了我 4 天的關鍵點:

由於圖可能是非連通圖,因此在最外層還需要加乙個迴圈,放置單個路徑挖掘完畢後,後續還有乙個獨立開來的圖結構;

遞迴 dfs 就免不了回溯,此時必須保證回溯的介面的各個引數都是正確的,否則一旦遇到稠密圖需要回溯時,可能就會因為引數的錯誤訪問了不該訪問的結點。

假設驗證序列 「 0 1 4 2 5 3 」,首先我們進入頂點 0:

根據序列,接下來我要去找頂點 1,路徑可走:

根據序列,接下來我要去找頂點 4,路徑可走:

根據序列,接下來我要去找頂點 2,路徑可走:

根據序列,接下來我要去找頂點 5,路徑可走:

根據序列,接下來我要去找頂點 3,路徑不存在,這是由於頂點 5 沒有指向其他頂點導致的。這個時候我們就回溯

我們發現,回溯到 0 號頂點時,有路徑通向 3 號頂點,遍歷繼續。

經檢驗,該 dfs 序列正確。

假設驗證序列 「 0 2 3 1 4 5 」,我們跳到第二步:

根據序列,接下來我要去找頂點 3,路徑不存在。但是這個時候,頂點 2 是存在向下深度搜尋的路徑的,分別是「 2->1 」 和 「 2->5 」,這就說明了序列是錯誤的。

該函式是個遞迴函式,用於執行所謂的「定向的 dfs」,同時兼具判斷合法性的功能。

bool judgedfs(mgraph& g, int dfs, int idx)

for (int i = idx + 1; i < g->n; i++)

else}}

if (flag == false)

}} return flag;

}

#include using namespace std;

//圖的鄰接矩陣

#define maxv 101

typedef struct //圖的定義

*mgraph, graphnode; //圖的鄰接矩陣表示型別

int visited[maxv];

void createmgraph(mgraph& g, int n, int e); //建圖

bool judgedfs(mgraph& g, int dfs, int idx);

int main()

for (j = 0; j < n; j++)

if (flag == false)

}if (flag == true)

else

}return 0;

}

PTA習題解析 修理牧場 2 種解法

禁止碼迷,布布扣,豌豆 碼農教程,愛碼網等第三方爬蟲 爬取!目錄哈夫曼樹 優先順序佇列 非 stl 庫 延伸閱讀 49我們如果按照分割木塊的思想去分析,會顯得很不直觀,所以我們直接通過我們的目標來組合出最花費的情況,那麼這就很顯然要使用貪心演算法來解決。如圖所示用圓形來表示小木塊。要保證花費更小,就...

實驗3 序列基本操作習題解析

給出乙個字串,字串中可能包含大小寫字母及標點符號。輸出字母i 包括大小寫 出現的次數。測試資料 it may be rainin but there s a rainbow above you.將給定的字串序列,按照字元ascii碼順序從小到大排序後輸出。測試資料 adecbtk 有乙份參加pyth...

PTA 類的定義以及使用(選擇題解析)

類的定義以及使用 2 1在下列關鍵字中,用以說明類中公有成員的是 2分 public private protected friend 正確答案 a 2 2有關類和物件的說法下列不正確的有 2分 物件是類的乙個例項 任何乙個物件只能屬於乙個具體的類 乙個類只能有乙個物件 類與物件和關係與資料型別和變...