演算法實驗4《回溯法》

2021-08-13 21:42:52 字數 1616 閱讀 6443

1. 編寫乙個簡單的程式,解決8皇后問題。

#include

using

namespace std;

bool

backtrack

(int list[8],

int t)

return

false;}

intmain

()

2. 批處理作業排程問題

[問題描述]給定n個作業的集合j=(j1, j2, … , jn)。每乙個作業ji都有兩項任務需要分別在2臺機器上完成。每乙個作業必須先由機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji,i=1,2, … ,n; j=1,2。

對於乙個確定的作業排程,設fji是作業i在機器j上完成處理的時間。則所有作業在機器2上完成處理的時間和成為該作業排程的完成時間和。 

批處理作業排程問題要求對於給定的n個作業,制定乙個最佳的作業排程方案,使其完成時間和達到最小。 

要求輸入: 

1)作業數 2)每個作業完成時間表: 

作業完成時間

機器1機器2

作業1 2

1 作業2 3

1 作業3 2

#include

using

namespace std;

void

backtrack

(int

*t1,

int*t2,

int*list1,

int*list2,

int*list,

int&sumtime,

int&time,

int t,

int n)

for(

int i =

0; i < n; i++)

//選擇1個作業

}int

main

()int

*list =

newint

[n];

//記錄作業執行的順序

int time =0;

//總時間

backtrack

(t1, t2, list1, list2, list, sumtime, time,

0, n);

cout << sumtime << endl;

system

("pause>nul"

);return0;

}

3. 數字全排列問題

任意給出從1到n的n個連續的自然數,求出這n個自然數的各種全排列。如n=3時,共有以下6種排列方式:123,132,213,231,312,321。

注意:數字不能重複,n由鍵盤輸入(n<=9)。 

#include

using

namespace std;

void

backtrack

(int n,

int t,

int*list)

for(

int i =

0; i < n; i++)}}

intmain

()

演算法入門(4) 回溯法

1 概念 回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術...

實驗五 回溯法

實驗 五 回溯法 一 實驗目的與要求 1 通過回溯法的示例程式理解回溯法的基本思想 2 運用回溯法解決實際問題進一步加深對回溯法的理解和運用 二 實驗內容 1 分析並掌握 符號三角 問題的回溯法求解方法 2 分析並掌握 n皇后 問題的回溯演算法求解方法 3 練習使用回溯法求解 整數變換 等問題。三 ...

實驗9 回溯法實驗一

實驗9 回溯法實驗一 oj練習 1.暢通工程續 2.最短路徑問題 3.最短路 4 choose the best route 5 乙個人的旅行 6 hdu today 7 bus system 8 0 or 1 實驗內容 1.程式設計實現dijkstra演算法。輸入 第1行第1個值表示頂點個數,第2...