作業分配(回溯法)

2021-07-31 10:02:07 字數 1346 閱讀 8663

有n份作業分配給n個人去完成,每人完成乙份作業。假定第i個人完成第j份作業需要花費cij時間, cij>0,1≦i,j≦n。試設計乙個回溯演算法,將n份作業分配給n個人完成,使得總花費時間最短。

c++實現:

/*

* author: qinwu

* created time: 2017/4/30 22:45:25

* file name: solution.cpp

*/#include

#include

#include

#include

#include

using

namespace

std;

class solution

void readdatafromtxt();//從data.txt中讀取資料

unsigned

int getmincost()//返回最小的開銷

void reset();//重置成員變數

~solution()

private:

void assign(int k, unsigned

int cost);//回溯法求解作業分配問題

//清除vector實際空間

template

void clearvector(vector

& vt)

private:

ifstream m_in;

int m_njob;//作業數

unsigned

int m_mincost;//最小開銷

vector

> m_c;//儲存每個工人完成每個作業的時間

vector

m_job;//標識作業是否被完成

};void solution::readdatafromtxt()

else

break;

}m_njob = m_c.size();

m_job = vector

(m_njob, false);

}void solution::reset()

void solution::assign(int k, unsigned

int cost)}}

}int main(void)

}

data.txt中的實驗資料:

實驗結果:

工作分配問題 (回溯法)

工作分配問題 time limit 1000 ms memory limit 65536 kib problem description 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為 cij。試設計乙個演算法,為每乙個人都分配1 件不同的工作,並使總費用達到最小。設計乙個演算法,對於...

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

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

回溯法 工作分配問題(dfs)

include using namespace std typedef long long ll const int maxn 1e5 5 const int inf 0x3f3f3f3f int n,c 20 20 將工作i分配給第j個人所需要的費用 每個人分配到乙個對應的工作,n個工作分別分配給...