• 算法第五章上机实践报告


    一 . 实践题目

    7-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
    

    三 . 算法描述

    1. 解空间

    第一个人选择第几个工作,第二个人选择第几个工作,第三个人选择第几个工作......

    这道题是一个排列数问题

    2.解空间树

    3.约束函数

    cc:当前总费用

    bestc:当前最佳费用

    if (cc+a[i][x[j]]<bestc){
                cc+=a[i][x[j]];
                swap(x[i], x[j]);
                Backtrack(i+1);
                swap(x[i], x[j]);
                cc-=a[i][x[j]]; 
      }

    4.核心代码

    void Backtrack (int i)
    {
      if (i>n){
          if(cc < bestc){
              bestc = cc;
          }
          return;
      } 
      else{
          for (int j=i;j<=n;j++) {
            if (cc+a[i][x[j]]<bestc){
                cc+=a[i][x[j]];
                swap(x[i], x[j]);
                Backtrack(i+1);
                swap(x[i], x[j]);
                cc-=a[i][x[j]];  
            }
        }
       }
    }

    四 . 心得体会

    我和同伴一开始对于回溯法的理解都不够,实验课的时候我们做第一题但是一直过不了,没有来得及看第二题。

    课后做了第二题,对回溯法有了进一步的理解,但是我们现在做题还是依赖于去套框架,还需要加强理解。

  • 相关阅读:
    macOS下Go语言开发环境的搭建
    yii使用createCommand()增删改查
    php in_array问题,0与字符串比较问题
    PHP shortURL
    redis集群批量删除某些key
    git tag的用法
    JSON Web Token(JWT)
    C# Stopwatch详解 转
    转::CString 操作指南
    MFC VC 中 TreeView 解析
  • 原文地址:https://www.cnblogs.com/Ygrittee/p/10162269.html
Copyright © 2020-2023  润新知