羽毛球队有男女运动员各n人。给定2个n×n 矩阵P和Q。P[i][j]是男运动员i和女运动员 j配对组成混合双打的男运动员竞赛优势;Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势;由于技术配合和心理状态等各种因素影响,P[i][j]不一定等于Q[j][i]。男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]* Q[j][i]。设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。   算法设计:设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

数据输入:第一行有1个正整数n(1≦n≦20〉。接下来的2n行,每行n个数。前n行是p,后n行是q。                                                                结果输出:将计算的男女双方竞赛优势的总和的最大值输出到文件output.txt。

输入文件示例                              输出文件示例

input.txt                                        output.txt

3                                                  52

10 2 3

2 3 4

3 4 5

2 2 2

3 5 3

4 5 1

算法思想:排列树问题,重新开辟一个数组记录女运动员或者男运动员,对其进行全排列,到回溯到最后一行时将得到的值与之前已得到的最大值进行比较,如果大于之前的最大值,则进行更新

参考代码如下:

#include<stdio.h>
#include<stdlib.h>#define N 100
int n;
int P[N][N],Q[N][N];
int x[N];
int opt[N];
int tempValue=0,maxValue=0;void compute(){tempValue = 0;for(int i=1;i<=n;i++){tempValue += P[i][x[i]]*Q[x[i]][i];}if(tempValue>maxValue){maxValue = tempValue;for(int i=1;i<=n;i++){opt[i] = x[i];}}
}void traceback(int t){int i,j,temp;if(t>n){compute();}for(i=t;i<=n;i++){temp = x[i];x[i] = x[t];x[t] = temp;traceback(t+1);temp = x[i];x[i] = x[t];x[t] = temp;       }
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){x[i] = i;}    for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&P[i][j]);}} for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&Q[i][j]);}}  traceback(1); printf("%d\n",maxValue);for(int i=1;i<=n;i++){printf("%d------%d\n",i,opt[i]);}return 0;
} 

运动员最佳配对问题(回溯)相关推荐

  1. java运动员最佳配对_运动员最佳配对问题 - osc_y1pyjby5的个人空间 - OSCHINA - 中文开源技术交流社区...

    这道题可以看为排列数的一个典型模块 一.算法实现题: 1.问题描述: 羽毛球队有男女运动员各n人,给定2个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q ...

  2. 运动员最佳匹配问题【回溯算法】

    Problem Description 羽毛球队有男女运动员各n 人.给定2 个n×n 矩阵P 和Q.P[i][j]是男运动员i 和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动 ...

  3. 程序基本算法习题解析 设计一个算法,计算男女运动员最佳配对方案,使各组男女双方竞赛优势的总和达到最大。

    题目: 羽毛球队有男女运动员各n人.给定2个n*n矩阵P和Q.P[i][j]是男运动员i和女运动员j,配对组成混合双打的男运动员竞赛优势,Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势. ...

  4. 运动员最佳匹配问题(详解)

    一.问题描述 羽毛球队有男女运动员各n人.给定2个n×n矩阵P和Q. P[i][j]是男运动员i的女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配对的女运动员竞赛 ...

  5. 辽宁师范大学计算机科学技术与,王相海 - 辽宁师范大学 - 计算机与信息技术学院...

    近期论文 查看导师最新文章 (温馨提示:请注意重名现象,建议点开原文通过作者单位确认) [1]硕士论文:"体元"纹理真实感生成研究,吉林大学,1995.6. [2]博士论文:三角B ...

  6. 算法设计之五大常用算法设计方法总结

    算法设计之五大常用算法设计方法总结 一.[分治法] 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再 ...

  7. 2017年下半年软件设计师选择题

    ''' 2019.5.10 ''' (1) 八进制表示方法由数字0开头,十六进制由数字0加小写字母x开头 (2) 存储 只读存储器(ROM)存储的内容是固定不变的,只能读出而不能写入的半导体存储器 读 ...

  8. 工作分配问题【回溯算法】

    Problem Description 设有n件工作分配给n个人.将工作i分配给第j个人所需的费用为 c i j c_{ij} cij​.试设计一个算法,为每一个人都分配1件不同的工作,并使总费用达到 ...

  9. c语言最短加法链问题回溯法,《回溯法习题》PPT课件.ppt

    1,课程安排,第5章 回溯法习题课,3,第5章 回溯法习题,子集和问题 最小长度电路板排列问题 最小重量机器设计问题 运动员最佳匹配问题 无分隔符字典问题 无和集问题 n色方柱问题 整数变换问题 拉丁 ...

  10. 【算法导论07】回溯法-旅行售货员问题

    07回溯法-旅行售货员问题 问题描述: 已知有m个城市,城市之间由n条不同长度的道路相连.一个售货员从一座城市出发,途径所有城市,并最终回到原点,设计算法计算售货员所走的最短路径结点. 问题分析: 从 ...

最新文章

  1. 【 转 】Keepalived工作原理
  2. j2me学习三_LCDui类学习(2)
  3. Linux -- Samba用户认证
  4. 随手能做194个实验,不呆板,轻松撬动大智慧
  5. 组合命令行生成工具pict
  6. 毕设项目 - 基于SSM的个人健康信息管理系统(含源码+论文)
  7. u盘写保护+计算机管理,取消u盘写保护的操作方法-电脑自学网
  8. Music Radio Beta-Perview 1.0.0.0.(做了一个听音乐电台的东东.:)
  9. Hive MetaStore java.lang.NoClassDefFoundError: com/facebook/fb303/FacebookService$Iface
  10. CC2640R2F学习笔记二:昇润科技开发资料阅读
  11. 女博士实名举报长江学者陈小武性骚扰女学生
  12. Java实现简单注册登录等功能
  13. 哲♂学【前排提醒非题解】
  14. 给初学和业余学习中医的朋友
  15. 使用android手机做鼠标
  16. Excel 中连续生成开始日期和结束日期之间的日期
  17. JavaScript代码具体是怎么引入到HTML中的?
  18. 快递100 home.html代码
  19. 使用linux 中的 tree 指定显示深度,显示文件目录结构
  20. 噪声为什么是高频信号_人类是信号,但科技将我们视为噪音

热门文章

  1. Vue.js数据双向绑定原理与实现
  2. 阿里云服务器mysql建表_如何在阿里云服务器上搭建MySQLl服务(最新版)
  3. iptables默认规则
  4. 不论你在世界上哪个地方,这些数据科学实习都是为你准备的
  5. 2020年7月份六级翻译必考词汇(有关新冠肺炎)
  6. YOLOv8原理深度解读,超级详细
  7. Linux | Linux使用互斥锁及条件变量替代信号量
  8. java计算机毕业设计-心理健康管理-源程序+mysql+系统+lw文档+远程调试
  9. mysql对应教师所排课数_计算中心教师排课系统的设计与实现
  10. Fiona地理数据引擎Python库