任务分配问题(回溯算法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CJL2313/article/details/78321780

要求把n项任务分配给n个人,每个人完成每项任务的成本不同,要求分配成本最小的最优分配方案。

代码:

#include <iostream>

#define N 205

using namespace std;

int c[N][N];

int x[N];

int BestM[N];

int n;

int Bmin=999999999;

int sum(int k)

{

    int temp=0;

    for(int i=1;i<=k;i++)

        temp+=c[i][x[i]];

    return temp;

}

void backtrack(int t)

{

    if (t==n){

        int ans=sum(n);

        if(ans<Bmin){

            Bmin=ans;

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

            BestM[i]=x[i];

        }

    }

    else

      for (int i=t;i<=n;i++) {

        swap(x[t], x[i]);

        if(sum(t)<Bmin)

        backtrack(t+1);

        swap(x[t], x[i]);

      }

}

int main()

{

    cin>>n;

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

      for(int j=1;j<=n;j++)

        cin>>c[i][j];

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

        x[i]=i;

    backtrack(1);

    cout<<endl<<"最优分配成本:"<<Bmin<<endl;

    cout<<endl<<"最优成本方案:"<<endl;

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

    cout<<""<<i<<" 个人完成第 "<<BestM[i]<<" 项任务"<<endl;

    return 0;

}

/*

4

9 2 7 8

6 4 3 7

6 8 1 8

7 6 9 4

55

50 43 1 58 60

87 22 5 62 71

62 98 97 27 38

56 57 96 73 71

92 36 43 27 95

*/

截图:

 

猜你喜欢

转载自blog.csdn.net/CJL2313/article/details/78321780