最佳运动员搭配问题

1. 设计并实现运动员最佳配对组队系统。

  算法的分析:

认识运动员最佳配对问题:

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

 

算法设计:

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


数据输入:n,Q,P的值。

 

数据输出:男女双方竞赛优势的总和的最大值。

#include <stdio.h>   
#define NUM 100   
   
int best[NUM],w[NUM],p[NUM][NUM],q[NUM][NUM];   
int answer = -1;   
   
void swap(int &a,int &b) {   //执行交换 
    int t = a;   
    a = b;   
    b = t;   
}   
   //update方法 
void update(int n) {   
    int sum = 0;   
    for(int i = 1; i <= n;i++)    
        sum += p[i][w[i]] * q[w[i]][i];   
    if(sum > answer) {   
        answer = sum;   
        for(int i = 1;i <= n;i++)   
            best[i] = w[i];   
    }   
}   
   //backtrack方法 
void backtrack(int level,int n) {   
    if(level > n)    
        update(n);   
    else 
        for(int i = level;i <= n;i++) {   
            swap(w[level],w[i]);   
            backtrack(level+1,n);   
            swap(w[level],w[i]);   
        }   
}   
   //主函数main 
int main() {   
    int n;   
    printf("有男女运动员各n人,请输入男女运动员个数n的值:\n"); 
    scanf("%d",&n);   
    printf("P[i][j]是男运动员i和女运动员j配对男运动员的竞赛优势,请输入P的值:\n");
    for(int i = 1;i <= n;i++)   
        for(int j = 1;j <= n;j++)   
            scanf("%d",&p[i][j]);   
    printf("Q[i][j]是男运动员j和女运动员i配对女运动员的竞赛优势,请输入Q的值:\n");
    for(int i = 1;i <= n;i++)   
        for(int j = 1;j <= n;j++)   
            scanf("%d",&q[i][j]);   
    for(int i = 1;i <= n;i++)   
        w[i] = i;   
   
    backtrack(1,n);
    printf("得到的男女搭配最大优势为:%d\n",answer);  
}



    原文作者:分支限界法
    原文地址: https://blog.csdn.net/lurao/article/details/50445840
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞