搜尋入門練習題1 素數環 題解

2022-08-19 22:09:07 字數 924 閱讀 1434

題目出處:《資訊學奧賽一本通》例5.1。

題目描述

素數環:從 \(1\) 到 \(n(2 \le n \le 20)\) 這 \(n\) 個數擺成乙個環,要求相鄰的兩個數的和是乙個素數。

輸入格式

輸入包含乙個整數 \(n(2 \le n \le 20)\) 。

輸出格式

按字典序從小到大的順序輸出所有排列方案,每個排列方案佔一行。每行的 \(n\) 個數之間由乙個空格分隔。

樣例輸入

2
樣例輸出
1 2

2 1

問題分析

很明顯,這是一道可以用搜尋解決的問題,我們可以採用「回溯」思想,使用深度優先搜尋解決這個問題。

我們用ans陣列來存放我們當前遍歷到的答案,ans[id]用於表示當前排列的第 id 個數是什麼。所以我們可以開乙個函式void f(int id)來表示要在第 id 個位置放數,我只需要從 1 到 n 遍歷每乙個數(我這裡假設是 i),並判斷 i 是否能放。

在第 id 個位置能放 i 當且僅當:

這樣,我們遞迴地呼叫f(id),當id>n時就是我們遞迴的邊界條件;一旦id>n就說明我找到了一種方案。

實現**如下:

#includeusing namespace std;

int ans[22], n;

bool isp(int a)

void output()

void f(int id)

for (int i = 1; i <= n; i ++)

}if (flag)

}}int main()

搜尋入門練習題8 選書 題解

題目出處 資訊學奧賽一本通 例5.7 題目描述 學校放假時,汪老師有a b c d e五本書,要分給參加培訓的張 王 劉 孫 李五位同學,每人只能選一本書。老師實現讓每個人將自己喜歡的數填寫在如下的 中。然後根據他們填寫的表來分配書本,希望設計乙個程式幫助老師求出所有可能的分配方案,使每個學生都滿意...

搜尋入門練習題5 八皇后問題 題解

題目描述 輸出格式 輸出乙個整數,用於表示八皇后問題的放置方案。題目分析 首先我們用 x,y 來表示棋盤上第 x 行第 y 列的格仔的座標。那麼,兩個皇后 x 1,y 1 和 x 2,y 2 會互相攻擊當且僅當滿足如下條件之一 我們可以用深度優先搜尋來解決這道題。我們可以發現的是,要想在 8 tim...

搜尋練習題(1)八皇后

檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...