回溯法示例1

2021-04-13 00:12:15 字數 630 閱讀 6294

假設需要n個任務分配給n個工人同時去完成,每個人都能承擔這n個任務,但費用不同。下面的程式用回溯法計算總費用最小的一種工作分配方案,在該方案中,為每個人分配1個不同的任務。

程式中,n個任務從0開始依次編號,n個工人也從0開始依次編號,主要的變數說明如下:

c[i][j]:將任務i分配給工人j的費用。

task[i]:值為0表示任務i未分配。值為j表示任務i分配給工人j。

worker[k]:值為0表示工人k未分配任務,值為1表示工人k已分配任務。

mincost:最小總費用。

#include

#include

using namespace std;

const int n = 8;

int c[n][n];

unsigned int mincost=65536;             //設定min初始值,大於可能的總費用

int task[n],temp[n],worker[n];

void plan(int k,unsigned int cost)

plan(0,0);

cout<<"最小費用="

return 0;

}

回溯法1 八皇后問題

問題 8x8格的西洋棋上 擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。思路 回溯法是一種試錯方法 1.先選乙個位置試著放置一下,並做 記錄 2.在每次子問題中進行判定時需要過去的 記錄 作為是否可以繼續嘗試的依據 3.最後很關鍵,需要在每次判斷...

演算法筆記之回溯法(1)

回溯法的思想是 能進則進,進不了換,換不了退。隱約束指對能否得到問題的可行解和最優解做出的約束。隱約束包括約束函式和限界函式。關鍵步驟是 定 空間 確定解空間的組織結構 子集樹 排列數 m叉樹等 搜尋解空間。回溯法階梯的關鍵是設計有效的顯約束和隱約束。每個物品重量w和價值v如下表所示,購物車容量為w...

回溯法,回溯法解裝載問題

利用回溯法解問題時一般按以下三步驟 1 定義問題的解空間 2 確定易於搜尋的解空間結構 3 以深度優先策略搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋 二 回溯法應用 裝載問題 一批貨櫃共n個要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi且w1 w2 wn c1 c2 試確定乙個...