运动员最佳配对问题——算法设计与分析(C实现)

目录

一、问题简述

二、分析

三、代码展示

四、结果验证


一、问题简述

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

       算法设计:设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女运动员竞赛优势的总和达到最大化。

       数据输入:由文件input.txt给出输入数据,第一行有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

二、分析

1、该问题要求的是男女运动员最佳配对的方法,使得各组男女双方竞争优势总和达到最大,那么我们需要把所有的搭配方法都求出来,完后通过比较,不断双更新maxValue的值

2、那么总的有几种搭配方案:男女人数都是相同的,而且都是一对一的搭配,我们把男生固定不变,通过变换女生顺序来进行搭配,那么女生的顺序有多少种,就会有多少种搭配方式。

3、女生有多少种搭配方式:全排列

      backtrack(int t)    //搜索树的第t层
       若 t>n, 判断 记录 返回
       对 i = t : n
       | 交换 x[t] 和 x[i]
       | 若 满足 Constraint(t) 且 Bound(t) //约束和限界条件
       | 则 backtrack(t+1);
       | 交换 x[t] 和 x[i]
       执行backtrack(1)
       初始x[i]=i

4、剪枝

(1)开辟一个新的数组,存储两个运动员搭配时的竞赛优势,并且以男运动员为固定,找出他的最佳搭配,并记录最大竞争优势。使用递归,如果剩下的最大竞争优势相加无法超过以得的最大值,那么就进行“剪枝”,结束递归

(2)对于数组,每一行的最大值就是这个男生i和这个所有女生搭配得到的最大竞争优势,这个女生就是j

(3)每一步进行计算,随时得到的结果进行比较。

 

三、代码展示

#include<stdio.h>
#include<stdlib.h>
 
#define N 21
int n;                       //存放男女运动员的个数 
int P[N][N],Q[N][N];         //分别用于存放男、女运动员的竞赛优势
int x[N];                    //x[N]用于存放男运动员N配对后的双方竞赛优势
int opt[N];                  //记录每个男生匹配后可达到的最大双方竞赛优势
int tempValue=0,maxValue=0;  //tempValue为竞争优势, maxValue为最大竞争优势 
 
 
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()
{
	freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);

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

	return 0;
} 

四、结果验证

那让我们一起来检验一下他的正确性吧~

(1)在代码相同路径下建立两个题目要求所需要的文件output.txt和input.txt

(2)在input.txt文件中输入相关的数据

(3)运行一下代码吧

 

(4)运行成功后,打开output.txt文件夹看看结果

 

这样就验证结束啦~

大家还可以更具自己的想法对程序进行改进,得到性能更好,效果更棒的程序哦~ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24324.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM框架学习-拦截器

1. 简介 在Spring框架中&#xff0c;拦截器是一种很重要的组件&#xff0c;它们允许在请求到达控制器之前或之后执行一些代码。拦截器在请求处理的特定点进行拦截&#xff0c;然后通过逻辑来决定是否将控制器的处理传递给下一个处理程序。 在Spring中&#xff0c;拦截器是由实现…

KVM虚拟化技术学习-基础入门

1.虚拟化技术概述 虚拟化[Virtualization]技术最早出现在 20 世纪 60 年代的 IBM ⼤型机系统&#xff0c;在70年代的 System 370 系列中逐渐流⾏起来&#xff0c;这些机器通过⼀种叫虚拟机监控器[Virtual Machine Monitor&#xff0c;VMM]的程序 在物理硬件之上⽣成许多可以运⾏…

Codeforces Round 764 (Div. 3)

比赛链接 Codeforces Round 764 A. Plus One on the SubsetB. Make APC. Division by Two and PermutationD. Palindromes ColoringE. Masha-forgetful A. Plus One on the Subset Example input 3 6 3 4 2 4 1 2 3 1000 1002 998 2 12 11output 3 4 1题意&#xff1a; 你可…

计算机网络考试多选题汇总Ⅱ

https://cadyin.blog.csdn.nethttps://blog.csdn.net/qq_38639612?spm1010.2135.3001.5421 计算机网络考试多选题汇总 1、在Windows中&#xff0c;任务管理器的作用是() A&#xff0e;终止未响应的应用程序 B&#xff0e;终止进程的运行 C&#xff0e;查看系统当前的信息 …

车载网络测试 - CANCANFD - 基础篇_01

目录 问题思考&#xff1a; 一、为什么需要总线? 二、什么是CAN总线? 三、为什么是CAN总线? 四、曾经的车用总线 1、SAEJ1850(Class2) 2、SAEJ1708 3、K-Line 4、BEAN 5、 byteflight, K-Bus 6、D2B 五、当前的车用总线 1、CAN 2、LIN 3、FlexRay 4、MOST 六…

python-sqlite3使用指南

python下sqlite3使用指南 文章目录 python下sqlite3使用指南开发环境sqlite3常用APICRUD实例参考 开发环境 vscode ​ 开发语言&#xff1a; python vscode SQLite插件使用方法&#xff1a; 之后在这里就可以发现可视化数据&#xff1a; sqlite3常用API Python 2.5.x 以上…

E往无前 | 腾讯云大数据 ElasticSearch 高级功能:Cross Cluster Replication实战

前言 Elasticsearch在platinum版本中&#xff0c;推出了Cross Cluster Replication特性&#xff08;以下简称CCR&#xff09;&#xff0c;也即跨集群远程复制。 该特性可以解决两类问题&#xff1a; 1&#xff0c;数据迁移&#xff1b; 2&#xff0c;异地备份。 本文以实战为主…

微服务和领域驱动

一、微服务 1.1 什么是微服务 微服务就是一些协同工作的小而自治的服务。 关键词&#xff1a; 小而自治 -- 小 “小”这个概念&#xff0c;一方面体现在微服务的内聚性上。 内聚性也可以称之为单一职责原则&#xff1a;“把因相同原因而变化的东西聚合到一起&#xff0c;…

企业电子招投标采购系统源码之登录页面-java spring cloud

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

202312读书笔记|《赶时间的人》——灰暗的从前会成为照亮未来的光,艰难的生活里,诗歌是那陡峭的另一面

202312读书笔记|《赶时间的人》——灰暗的从前会成为照亮未来的光&#xff0c;艰难的生活里&#xff0c;诗歌是那陡峭的另一面 《赶时间的人》 作者王计兵&#xff0c;一个外卖员的诗&#xff0c;饱含对生活的热情&#xff0c;向上的力量&#xff0c;仿若身在炼狱&#xff0c;心…

【计算机网络】3、IO 多路复用:select、poll、epoll、reactor | 阻塞非阻塞、同步异步

文章目录 一、select()1.1 用法1.1 实战 二、poll()2.1 用法2.2 实战 三、阻塞、非阻塞3.1 非阻塞 IO3.1.1 read()3.1.2 write()3.1.3 accept()3.1.4 connect()3.1.5 非阻塞IO select() 多路复用实战 四、epoll()4.1 epoll_create()4.2 epoll_ctl()4.3 epoll_wait()4.4 实战4.…

Dubbo源码篇07---SPI神秘的面纱---原理篇---下

Dubbo源码篇07---SPI神秘的面纱---原理篇---下 引言根据name获取扩展实例对象获取默认扩展实例对象按条件批量获取扩展实例对象实例演示 小结 引言 上篇文章&#xff1a; Dubbo源码篇06—SPI神秘的面纱—原理篇—上 我们追踪了getAdaptiveExtension获取自适应扩展点的整个流程…

(常见)数据模型

文章目录 数据模型概述一、数据模型概要1.模型、建模与抽象2.数据模型3.两类数据模型 二、数据库模型的组成要素1.数据结构2.数据操作3.数据的完整性约束 三、概念模型1.概要2.基本概念3.概念模型的表示方法 常用数据模型一、层次模型1.简介2.数据结构3.数据操纵与完整性约束4.…

【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例

UART 简介 我们在使用 PS 的时候&#xff0c;通常会添加 UART 控制器&#xff0c;用于打印信息和调试代码。除此之外&#xff0c;PS 在和外 部设备通信时&#xff0c;也会经常使用串口进行通信。 UART 控制器 UART 控制器是一个全双工异步收发控制器&#xff0c;ZYNQ 内部包…

教你一步步使用实现TensorFlow 进行对象检测

在本文中,我们将学习如何使用 TensorFlow Hub 预训练模型执行对象检测。TensorFlow Hub 是一个库和平台,旨在共享、发现和重用预训练的机器学习模型。TensorFlow Hub 的主要目标是简化重用现有模型的过程,从而促进协作、减少冗余工作并加速机器学习的研发。用户可以搜索社区…

Linux内核源码分析-进程调度(五)-组调度

出现的背景 总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢&#xff0c;假设多用户计算机系统每个用户的所有任务划分到一个分组中&#xff0c;A用户90个任务&#xff0c;而B用户只有10个任务&#xff08;这100个任务假设都是优先级一…

Python 下载的 11 种姿势,一种比一种高级

今天我们一起学习如何使用不同的Python模块从web下载文件。此外&#xff0c;你将下载常规文件、web页面、Amazon S3和其他资源。 通过本文的学习&#xff0c;你将学到如何克服可能遇到的各种挑战&#xff0c;例如下载重定向的文件、下载大型文件、完成一个多线程下载以及其他策…

C# WPF窗体设计器显示以及App.xaml文件打不开(VS 2022)

问题描述&#xff1a; 在项目中遇到了App.xaml设计器打不开以及窗体设计器不显示&#xff0c;只有代码&#xff0c;如图所示&#xff1a; 可以明显的看见左下角的设计器不见&#xff0c;但是用户控件又有设计器 解决方法&#xff1a; (一、App.xaml不能正常打开) ①清理项…

定薪17K*15,阿里测开岗上岸面经分享....

先简单介绍一下我自己吧&#xff0c;等会大家以为我是什么学历狂人&#xff0c;技术大牛&#xff0c;我毕业于广东一个普通本科院校&#xff0c;绝对不是什么双一流大学&#xff0c;大家不要有距离感&#xff0c;这也是我为什么来分享的原因&#xff0c;因为我觉得我这段经验还…

硬件软件【部署】

开发板和主机 1.功能不同&#xff1a;帮助开发者进行嵌入式系统的开发和调试&#xff0c;具有较强的硬件拓展能力&#xff0c;可以连接各种传感器/执行器等外设。主机为满足一般的计算需求而设计&#xff0c;具备更强的计算和图形处理能力。 2.架构不同&#xff1a;开发板通常…