演算法第五章實踐報告
阿新 • • 發佈:2018-12-23
1. 實踐題目
工作分配問題
2. 問題描述
設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 。 設計一個演算法,對於給定的工作費用,為每一個人都分配1 件不同的工作,並使總費用達到最小。
輸入格式:
輸入資料的第一行有1 個正整數n (1≤n≤20)。接下來的n行,每行n個數,表示工作費用。
輸出格式:
將計算出的最小總費用輸出到螢幕。
輸入樣例:
在這裡給出一組輸入。例如:
3
10 2 3
2 3 4
3 4 5
輸出樣例:
在這裡給出相應的輸出。例如:
9
3. 演算法描述
解空間:{1,2,······,n} ,第一個元素為第一個工作,元素內容對應為第幾個人
解空間樹:排列樹
#include<iostream>
using namespace std;
int n,cost=0;
int x[100],c[100][100];
void work(int i,int count){
if(i>n && count<cost){
cost = count;
return ;
}
if(count<cost)
for(int j=1;j<=n;j++)
if(x[j] == 0){
x[j] = 1;
work(i+1,count+c[i][j]);
x[j] = 0;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>c[i][j];
x[j] = 0;
}
cost+=c[i][i];
}
work(1,0);
cout<<cost<<endl;
system("pause");
return 0;
}
4. 心得體會
寫程式碼之前先確定下排列樹是怎麼樣的,讓自己有一個清晰的思路,當中也遇到了一些困難,但是在與夥伴的合作之前,也能順利地完成該程式碼。