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

news2025/1/11 11:56:42

目录

一、问题简述

二、分析

三、代码展示

四、结果验证


一、问题简述

       问题描述:羽毛球队有男女运动员各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文件夹看看结果

 

这样就验证结束啦~

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

msvcr110.dll丢失的解决方法,多种方法助你解决msvcr110.dll丢失

当您在尝试打开某个程序或游戏时&#xff0c;可能会看到一个错误消息&#xff0c;提示您的计算机缺少msvcr110.dll文件。这是因为该文件是Microsoft Visual C Redistributable库的一部分&#xff0c;缺少它可能会导致应用程序无法正常运行。在本文中&#xff0c;我们将详细介绍…

【接口测试】JMeter接口关联测试

‍‍1 前言 我们来学习接口管理测试&#xff0c;这就要使用到JMeter提供的JSON提取器和正则表达式提取器了&#xff0c;下面我们来看看是如何使用的吧。 2 JSON提取器 1、添加JSON提取器 在线程组右键 > 添加 > 后置处理器 > JSON提取器 2、JSON提取器参数说明 N…

19-03 基于业务场景的架构技术选型

Java架构师系列导航目录 金融领域的挑战与架构设计 金融领域的方向 借贷保险证券交易 互联网金融 vs 传统金融 满足更广泛群体的金融需求增强金融普惠性提高金融服务效率 互联网金融前景 近十年蓬勃发展&#xff0c;朝阳行业&#xff1a;花呗、借呗、微粒贷、余额宝双刃剑&am…

【案例教程】基于“遥感+”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作

光谱和图像是人们观察世界的两种方式&#xff0c;高光谱遥感通过“图谱合一”的技术创新将两者结合起来&#xff0c;大大提高了人们对客观世界的认知能力&#xff0c;本来在宽波段遥感中不可探测的物质&#xff0c;在高光谱遥感中能被探测。以高光谱遥感为核心&#xff0c;构建…

动态远程桌面如何用来做爬虫

爬虫需要动态IP主要是为了避免被目标网站封禁或限制访问。如果使用固定IP进行爬取&#xff0c;很容易被目标网站识别出来并封禁&#xff0c;导致无法继续爬取数据。而使用动态IP可以让爬虫在不同的IP地址之间切换&#xff0c;降低被封禁的风险。此外&#xff0c;动态IP还可以帮…

Ebay、亚马逊高低单价产品如何打造?自养号测评策略解析

很多卖家都认为低单价产品太卷了&#xff0c;于是选择了进入了高单价细分类目&#xff0c;一进入&#xff0c;发现广告竞价高到自己无法接受&#xff0c;转化还特别差&#xff0c;然后一直在挣扎中。眼下整个跨境市场&#xff0c;无论是高单价产品&#xff0c;还是低单价产品&a…

redis-server源码

1 redis主流程 redis启动流程: 1 加载配置&#xff1b;2 初始化redis master、slave以及sentinel的sri&#xff1b;3 注册事件事件serverCron。 <span style"background-color:#f5f2f0"><span style"color:black"><span style"color:…

WebRTC学习笔记01——最简单实现一对一视频通讯

最近开始学习WebRTC音视频通讯技术&#xff0c;这里来分享一下学习的内容和感受。 学习WebRTC的门槛稍微高那么一点点&#xff0c;需要同时具备服务端和前端的开发能力&#xff0c;因为我主要是做java服务端开发&#xff0c;这里我用到的服务端代码也是java编写的。 在写代码…

阿里组织架构迎来巨变!拆分为六大业务,或可分别独立上市

“16N”组织调整是阿里巴巴“24年来最重要的一次组织变革”&#xff0c;六大业务集团及业务公司可以独立融资或独立上市&#xff0c;意味着阿里的整体估值将得到大幅提升。 马云回国、阿里巴巴宣布启动“16N”组织调整、具备条件的业务集团和公司将独立上市……一系列有关阿里…

jetcache参考文档

jetcache简介 https://github.com/alibaba/jetcache/blob/master/docs/CN/GettingStarted.md 简介 JetCache是一个基于Java的缓存系统封装&#xff0c;提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解&#xff0c;可以原生的支持TTL、两级…

SpringBoot + Docker 实现一次构建到处运行

一、容器化部署的好处 Docker 作为一种新兴的虚拟化方式&#xff0c;它可以更高效的利用系统资源&#xff0c;不需要进行硬件虚拟以及运行完整操作系统等额外开销。 传统的虚拟机技术启动应用服务往往需要数分钟&#xff0c;而 Docker 容器应用&#xff0c;由于直接运行宿主内…

javaweb实验:Java Web综合应用开发__基于MVC模式

目录 前言实验目的实验原理实验内容实验过程项目结构代码实现Java代码controller层AddNewsServlet类DeletrNewsServlet类LoginServlet类LogoutServlet类QueryAllNewsServlet类QueryNewsServlet类RegisterServlet类UpdateNewsServlet类 dao层NewsDao类UserDao类 daoimpl层NewsDa…

标签派单系统架构设计

需求描述 项目背景 根据员工历史成单情况&#xff0c;计算员工对不同类型工单的转化能力。根据员工和工单标签匹配进行派单。 业务流程图 规则描述 每10分钟&#xff0c;分城进行一次派单&#xff0c;派单规则可能会动态删减&#xff0c;需要支持动态配置 工单标签说明 一…

抖音seo源码开发,技术交付及故障。服务等响应

抖音seo源码开发、抖音seo源码部署、抖音seo源码开源交付及故障响应 什么是抖音SEO&#xff1f; 抖音SEO主要是指通过一系列优化措施&#xff0c;提高抖音短视频在抖音搜索结果页的排名&#xff0c;从而增加短视频曝光量和观看量的过程。SEO的实现需要涉及多个方面&#xff0c…

MySQL基础一篇打通,图文并茂

准备工作 直接使用MySQL提供的数据&#xff0c;下载MySQL示例数据库 MySQL示例数据库模式由以下表组成&#xff1a; Customers&#xff1a;存储客户的数据。Products&#xff1a;存储比例模型车列表。ProductLines&#xff1a;存储产品系列类别列表。Orders&#xff1a;存储…

【前端工程化】Git入门指南:轻松掌握从安装到操作!

git入门指南 安装和基本配置Bash&#xff0c;CMD和GUI用户名和邮箱的配置 Git仓库本地Git仓库文件状态的划分文件状态检测git忽略文件的配置&#xff08;了解&#xff09;文件更新提交git校验和-日志和版本回退git loggit resetgit reflog 远程仓库远程仓库的操作获取远程仓库远…

整合Springboot+MybatisPlus+达梦数据库

1、安装Windows环境的达梦数据库可视化软件 这里不做安装介绍 安装步骤很简单&#xff0c;提供的软件也很全面&#xff0c;特别是数据库迁移工具&#xff0c;支持市面上许多主流的大型数据库&#xff0c;例如&#xff1a;Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix…

Axure 原型模板素材哪里下载

1、Axure 原型模板素材哪里下载 如果你想要下载 Axure 原型模板素材&#xff0c;可以前往即时设计资源广场进行一键复用。在即时设计资源广场&#xff0c;你可以免费使用所有的 Axure 原型模板素材&#xff0c;而且没有文件数量、团队或项目数量的限制。这大大降低了资源共享的…

医疗平台,专攻医学软件方向,病历云、影像学、实验室检验

一、开源项目简介 JEHC 本开源平台重点打造医疗&#xff08;专攻医学软件Web方向&#xff0c;病历云&#xff0c;影像学&#xff0c;实验室检验等等&#xff09;&#xff0c;IOT方向&#xff0c;工作流Workflow等。 JEHC-CLOUD基于Spring Cloud 2.X版本&#xff0c;采用前后…

当BIM遇见建筑,设计灵感无限,欣赏有趣的BIM建筑

人们常用“罗马是怎样建成的”来形容建成伟大城邦的复杂和艰辛&#xff0c;也因此&#xff0c;优秀的建筑是如何通过科学严密的设计建成&#xff0c;就成了值得研究的经验。随着国际化交流合作的日益增多&#xff0c;以及BIM先驱者标准院的技术经验引进&#xff0c;BIM在我们的…