演算法設計例題 批處理作業排程(回溯)

2021-09-30 16:59:01 字數 1565 閱讀 8201

給定n個作業的集合j= 。每乙個作業ji都有兩項任務分別在兩台機器上完成。每個作業必須先由機器1處理,然後由機器2處理。作業ji需要機器j的處理時間為tji,其實i=1, 2, …,nj=1, 2。對於乙個確定的作業排程,設fji是 作業i在 機器j上完成處理的時間。所有作業在機器2上完成處理的時間之和n個作業,制定最佳作業排程方案,使其完成時間和達到最小。

全排列,剪枝

#include int book[8];

int path[8];

int work[2][8];

int time_all;

/*** n:作業個數

* cnt:當前所完成作業個數

* time:到目前為止所完成作業的總時間

* path:最優次序

* book: 標記作業是否完成 也記錄著作業完成次序

* work:作業資訊

* time_all:完成所有作業所需時間

* machine_a :機器a完成機器上的作業所需時間

* machine_b:機器b完成機器上的作業所需時間

* work-index:作業下標

****作業要在b機器完成需先在a機器完成,且b機器無作業

*/void fun(int machine_a, int machine_b, int time, int work_index, int cnt, int n)while(k!=-1);

time_all = time;

}return;

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

else

// printf("%d %d*\n", temp_a,temp_b);

int tttt = temp_b; /// tttt為此次作業的完成時間

fun(temp_a, temp_b, time+tttt, i, cnt+1, n);

book[i] = 0; ///深搜完成,標記此次作業為未完成}}

}int main()

time_all = 0x3f3f3f3f;

fun(0,0,0,-1,0,n);

printf("case %d: %d\n", i, time_all);

for(int k = n-1; k >0; k--)

printf("%d\n", path[0]);

}return 0;}/*

131 10 2

3 0*****

2 1 3

9*****13

2 13 1

2 3*****

1 3 2

18*****

*/

回溯法 批處理作業排程 回溯演算法 批處理作業排程

成為該作業排程的完成時間和。批處理作業排程問題要求對於給定的 n個作業 制定乙個最佳的作業排程方案 使其完成時間和達到最小。批處理作業排程問題的乙個常見例子是在計算機系統中完成一批 n個作業,每個作業都要完成先計算,然 後將計算機結果列印輸出這兩項任務 計算任務由計算機的 處理器完成 列印輸出任務由...

回溯法 批處理作業排程 回溯法 批處理作業排程

問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...

批處理作業排程(回溯)

一 題目描述 給定n個作業的集合j j1,j2,jn 每個作業j都有兩項任務分別在兩台機器上完成。每個作業必須先由機器1處理,再由機器2處理。作業i需要機器j的處理時間為tji i 1,2,n j 1,2 對於乙個確定的作業排程,設fji是作業i在機器j上完成處理的時間,則所有作業在機器2上完成處理...