分配人员(深搜未剪枝版)

题目描述

有n个人从事n项工作,每个人只能从事一项,程序读入他们做每个工作的效益,求最佳安排使效益最高

输入文件

第一行为n,以下n*n为。。。(如题)

输出文件

两行,第一行第i个数表示第i个人从事的工作,第二行为最优情况下的效率的总和

#include<iostream>

using namespace std;

int data[10][10];
int f[10],g[10],p[10];//f为深搜中当前的人员分配,g中为当前最优的人员分配方案,p用1/0表示第i份工作是否被做
int n,maxl,now;//now为当前的效率总和,maxl为当前最优值

void go(int step){
  if(step==n+1){
    if(now>maxl){
      maxl=now;
      for(int i=1;i<=n;i++) g[i]=f[i];
  }
  return;
}//判断是否分配完成,并尝试更新最优值
  for(int i=1;i<=n;i++){
    if(p[i]==0){
      f[step]=I; p[i]=1; now+=data[step][i];//标记
      go(step+1);
      now-=data[step][i];
      p[i]=0;//回溯
      }
   }
}

int main(){
  maxl=0; cin>>n;
  for (int i=1;i<=n;i++)
    for (int j=1;j<=n;j++)
      cin>>data[i][j];
  for (int i=1;i<=n;i++) p[i]=0;//初始化
  go(1);
  for(int i=1;i<n;i++) cout<<g[i]<<" ";
  cout<<g[n]<<endl;
  cout<<maxl<<endl;//输出最优解
  return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第1章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章...
    小狮子365阅读 13,650评论 3 71
  • 那时为了靠近你,不顾脸面,不管身形,跌跌撞撞,像极了往天空极力伸展的树枝。你嘲笑我:只顾得向上靠近,却忘了用繁枝叶...
    美人师师阅读 1,364评论 0 0
  • 小时候总想着长大,总渴望爱情。没想到长大之后却发现失去了去爱的能力,和对自己的不肯定。现在在回头想想,是自己知识太...
    清清小妖阅读 1,225评论 0 1
  • 也许你不喜欢我,但我喜欢你就愿意为你付出啊。喜欢不一定要得到,只要你幸福就好。这种话对于我来说真的好困难,我是个自...
    柯大大阅读 1,792评论 0 0

友情链接更多精彩内容