码迷,mamicode.com
首页 > 其他好文 > 详细

Ka的回溯编程练习 Part4|分配工作

时间:2015-05-20 20:09:39      阅读:577      评论:0      收藏:0      [点我收藏+]

标签:

设有A,B,C,D,E五人从事J1,J2,J3,J4,J5五项工作,每人只能从事一项,他们的效益如下。

技术分享

每人选择五项工作中的一项,在各种选择的组合中,找到效益最高的的一种组合输出。

这个主要是细节了,没什么难度

 1 #include<stdio.h>
 2 int MansToJobs[6][6]={{0,0,0,0,0,0},{0,13,11,10,4,7},{0,13,10,10,8,5},{0,5,9,7,7,4},{0,15,12,10,11,5},{0,10,11,8,8,4}};
 3 //以上,前一维代表人名,后一维代表工作量
 4 int TheBestResultOfDistribution[6]={0}; //选择时的临时储存
 5 int BossWantIt[6]={0}; //最优解的储存   和上面都是下标代表工作序号,内容代表工作者
 6 int BestRecord=0,NowadayRecord=0;  //工作总量储存:BestRecord是最优解的储存,NowadayRecord是临时储存
 7 int search(int n)    //第几个人
 8 {
 9     int i,j;
10     for(i=1;i<=5;i++) //第几个工作
11     {
12         if(TheBestResultOfDistribution[i]==0) //如果此工作没人干
13         {
14             TheBestResultOfDistribution[i]=n; //交给此人
15             NowadayRecord+=MansToJobs[n][i]; //记录工作总情况
16             if(n==5)   //如果已经有了5个选择
17             {
18                 if(NowadayRecord>BestRecord)   //又如果这一次的总工作量大于上一次记录的最多的
19                 {
20                     BestRecord=NowadayRecord; //替代一下
21                     for(j=1;j<=5;j++)
22                         BossWantIt[j]=TheBestResultOfDistribution[j];
23                 }
24             }
25             else search(n+1);
26             TheBestResultOfDistribution[i]=0; //恢复现场,这一步别的框架可能不需要,但这个需要
27             NowadayRecord-=MansToJobs[n][i]; 
28         }
29     }
30     
31 }
32 int main()
33 {
34     int i;
35     search(1);
36     for(i=1;i<=5;i++) //输出没什么好说的了
37         printf("The job:%d give the guy:%d\n",i,BossWantIt[i]);
38     printf("total:%d",BestRecord);
39     return 0;
40 }

 

Ka的回溯编程练习 Part4|分配工作

标签:

原文地址:http://www.cnblogs.com/KakagouLT/p/4517838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!