zoukankan      html  css  js  c++  java
  • 选择工作 回溯搜索

    设有ABCDE五人从事J1J2J3J4J5五项工作,每人只能从事一项,他们的效益如下。

    每人选择五项工作中的一项,在各种选择的组合中,找到效益最高的的一种组合输出。
    /*相当于将五种工作排列组合,从中挑选出效率最高的*/

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<iomanip>
    using namespace std;
    int data[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}};//每个人的工作效率
    int maxx=0,g[10],f[10];
    bool work[6];//每个工作又没有被选
    int search(int,int);
    int main()
    {
    search(1,0);
    for(int i=1;i<=5;i++)
    {
    cout<<char(64+i)<<":J"<<g[i]<<" ";//每个工人干什么工作
    }
    cout<<"supply:"<<maxx<<endl;//输出效率
    return 0;
    }
    int search(int x,int t)
    {
    for(int i=1;i<=5;i++)
    {
    if(!work[i])//第i个工作没有被选
    {
    f[x]=i;//第x个人选第i个工作
    work[i]=1;//工作被选
    t+=data[x][i];//效率和增加

    if(x==5)
    {
    if(t>maxx)//选出效率最高的那一个
    {
    maxx=t;
    for(int i=1;i<=5;i++)
    {
    g[i]=f[i];
    }
    }
    }
    else
    search(x+1,t);
    t-=data[x][i];//回溯
    work[i]=0;
    }
    }
    }

  • 相关阅读:
    Code first常用命令
    vue问题集锦
    net WebConfig读写
    CefSharp使用心得
    工作问题
    工作总结
    HttpContext.Current.Session为null
    Java基础00-接口组成更新31
    Java基础00-Lamda表达式30
    Java基础00-网络编程29
  • 原文地址:https://www.cnblogs.com/zzyh/p/6609428.html
Copyright © 2011-2022 走看看