n皇后問題演算法實驗報告

2022-08-02 16:36:02 字數 1523 閱讀 3879

演算法分析與設計實驗報告

實驗內容:n皇后問題

實驗時間:2013.12.3

姓名:杜茂鵬

班級:計科1101

學號:0909101605

一、實驗內容及要求

在n×n格的棋盤上放置彼此不受攻擊的n個皇后, 按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。

2、實驗目的

1.鞏固和加深對回溯法的理解

2.了解遞迴和迭代法在回溯法中的應用

3、演算法分析

1.理解皇后不被攻擊的條件:n後問題等價於在n*n格的棋盤上放置n個皇后,任何兩個皇后不能放在同一行或同一列或同一斜線上。

2.演算法模組簡要分析

用陣列儲存皇后的位置,將i設定為0.

int place(*x,n) :陣列x 用來表示列數,n為皇后個數,用來判斷皇后是否被攻擊,判斷的條件是(x[i]-x[n]==i-n||x[i]-x[n]==n-i||x[i]==x[n])即用來判斷「同一行或同一列或同一斜線上」。

int print(*x,n):列印皇后解的空間。

int iniprint(*x,n):初始化列印函式,相當於對棋盤初始化。將可以放皇后的位置記為「1」,不放皇后的位置記為「0」。

int nqueen(int n):n皇后問題求解,如果滿足一組可行解,sum++。int i=0,如果x[i]>=n的時候即進行下一行,i++;當i=n時,sum++;輸出該組可行解的個數和位置的矩陣。

並且i--,回溯到上一層繼續搜尋可行解。

4、執行結果及分析

1、 三皇后沒有可行解

2、 2.4個皇后有2個可行解

3.5皇后有10個可行解

五、源**

#include<>

static int n, sum=0;//可行解個數

static int locate[20];

int place(int k)

return 1;

}void back(int m)

else

如果沒有安排完則遞迴繼續下乙個安排,無解則返回上乙個

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

locate[m]=i;

if(place(m

back(m+1

}}int main()

六、實驗心得

回溯法有「通用解題法」之稱,用它可以搜尋問題的所有解。它是乙個既帶有系統性又帶有跳躍性的搜尋演算法,是按照深度優先策略,從根節點出發搜尋解空間樹。演算法搜尋至某一節點時,利用判斷函式先判斷該節點內是否包含問題的解,如果不包含則直接跳過,節省時間,相關的判斷函式根據實際問題來編寫。

比較適合求解組合數較大的問題。

通過本次試驗,對回溯法有了深刻的理解,並且對遞迴得到了鞏固。

在編寫n皇后演算法的過程中,遇到了一些問題,當以普通的方式回溯時,當n>=11時,程式執行時間變得很長,說明該演算法的時間複雜度比較大。由於時間原因沒有來得及使用遞迴,接下來可以比較一下兩者的演算法的時間複雜度。

程式不是一時之事,需要長時間的積累,逐步付諸實踐才能真正的掌握。

頁面置換演算法問題實驗報告

作業系統實驗報告 實驗五頁面置換演算法問題 最佳頁面置換演算法與先進先出fifo頁面置換算法學號 班級 姓名 成績 一實驗目的 了解最佳頁面置換演算法與先進先出fifo頁面置換演算法,並掌握其基本原理二實驗目標 用c語言模擬最佳頁面置換演算法與先進先出fifo頁面置換演算法三實驗步驟 第一步,輸入系...

演算法實驗報告01揹包問題

姓名 學號 班級 一 實驗目的與要求 熟悉c c 語言的整合開發環境 通過本實驗加深對貪心演算法 動態規劃和回溯演算法的理解。二 實驗內容 掌握貪心演算法 動態規劃和回溯演算法的概念和基本思想,分析並掌握 0 1 揹包問題的三種演算法,並分析其優缺點。三 實驗程式 include int n 5 i...

環境實驗報告n

環境試驗測試報告 conclusion passng 目錄 一 低溫貯存試驗 1 試驗方法 1 1 環境溫度 見下表1 1 2 輸入電壓 見下表1 1 3 負載 見下表2 1 4 溫度的變化斜率 1 分鐘 1 5 輸入電壓與保持時間 on off 即開關機,2 seconds on 2 second...