演算法設計與分析 實驗3

2021-08-15 02:52:35 字數 2084 閱讀 5990

一、     

實驗目的和要求

學習程式設計實現深度優先搜尋狀態空間樹求解實際問題的方法,著重體會求解第乙個可行解和求解所有可行解之間的差別。加深理解回溯法通過搜尋狀態空間樹、同時用約束函式剪去不含答案狀態子樹的演算法思想,會用蒙特卡羅方法估計演算法實際生成的狀態空間樹的結點數。

二、實驗環境

(實驗裝置

)

vsialstudio 2017

三、     

實驗原理及內容

1.    要求用回溯法求解8-皇后問題,使放置在8*8棋盤上的8個皇后彼此不受攻擊,即:任何兩個皇后都不在同一行、同一列或同一斜線上。請輸出8皇后問題的所有可行解。

源**:

#include

#include

using namespace std;

bool place(int k, int i, int *x);  //判定兩個皇后是否在同一列或在同一斜線上

void nqueens(int k, int n, int *x);  //遞迴函式(求解n皇后問題)

void nqueens(int n, int *x);

bool place(int k, int i, int *x)

}returntrue;

}void nqueens(int k, int n, int *x)

cout<< endl;

}else}}

}void nqueens(int n, int *x)

int main()

nqueens(8,x);

return 0;

}2.用回溯法編寫乙個遞迴程式解決如下裝載問題:有n個貨櫃要裝上2艘載重分別為c1和c2的輪船,其中貨櫃i的重量為wi(1≤i ≤ n),且σ??≤?1+?2??=1。問是否有合理的裝載方案可以將這n個貨櫃裝上這2艘輪船?如果有,給出裝載方案。

舉例:當n=3,c1=c2=50,且w=[10,40,40]時,可以將貨櫃1和2裝到第一艘輪船上,貨櫃3裝到第二艘輪船上;如果w=[20,40,40]時,無法將這3個貨櫃都裝上輪船。

源**:

#include

#include

using

namespace

std;

template

<

class

t>

class

loading

} ~loading()

void

backtrack(

inti);

void

show(); };

template

<

class

t>

void

loading

<

t>::backtrack(

inti)

return;

} //搜尋子樹

r-= w[

i- 1]; if

(cw + w[

i- 1] <= c1)

if(cw + r >bestw)

r+= w[i];

} template

<

class

t>

void

loading

<

t>::show()

if(s

cout

<<

"的裝載

"<<

endl;

cout

<<

"第二艘船:";

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

cout

<<

"的裝載

"<<

endl;

}    

else

cout

<<

"c2超載!

"<<

endl; }

void

main()

演算法設計與分析 實驗1

一 實驗目的和要求 理解分治法的演算法思想,閱讀實現書上已有的部分程式 並完善程式,加深對分治法的演算法原理及實現過程的理解。二 實驗環境 實驗裝置 code blocks13.12 三 實驗原理及內容 一 用分治法實現一組無序序列的兩路合併排序和快速排序。要求清楚合併排序及快速排 序的基本原理,程...

演算法分析與設計實驗十二

問題 給定無向連通圖g和m種顏色,用這些顏色給圖的頂點著色,每個頂點一種顏色。如果要求g的每條邊的兩個頂點著不同顏色。給出所有可能的著色方案 如果不存在,則回答 no 解析 四色猜想 四色問題是m圖著色問題的乙個特例,根據四色原理,證明平面或球面上的任何地圖的所有區域都至多可用四種 顏色來著色,並使...

演算法分析與設計實驗三 檢索演算法設計

在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在t的下標j 如果x不在t中,輸出j 01.順序查詢 從第乙個元素x開始逐個與需要查詢的元素key進行比較,當x key時返回x的下標,如果比較到最後都沒有找到,則返回j 0 2.二分查詢 不斷地將有序陣列進行對半分割,並檢查每個分割槽的中...