男女运动员最佳配对问题

yao450860487 2009-12-07 07:38:06
#include "stdafx.h"
#include <iostream>
using namespace std;
class auther
{
friend int allocation (int ** ,int ** , int );
private :
int n ;//男女运动员各n人
int ** P;
int ** Q;
int * w;
int p_sum;//记录当前男女竞赛总优势
int best_sum;//男女运动员配对最优解
protected :
void Backtrack(int k);
void Swap(int &a,int &b);
};

void auther::Backtrack(int k)
{ p_sum=0;
if(k>=n)
{
for(int i=1;i<=n;i++)
{
p_sum+=P[i][w[i]]*Q[w[i]][i];

}
if(p_sum>best_sum)
{
best_sum=p_sum;


}
}
else
{
for(int i=k;i<=n;i++)
{
Swap(w[k],w[i]);
Backtrack(k+1);
Swap(w[k],w[i]);
}
}
}
void auther::Swap(int &a, int &b)
{
int temp=a;
a=b;
b=temp;
}

int allocation (int ** P,int ** Q,int n)
{
auther X;
X.n=n;
X.P=new int *[n+1];
for(int i=1;i<=n;i++)
X.P[i]=new int [n+1];
X.Q=new int *[n+1];
for(int i=1;i<=n;i++)
X.Q[i]=new int [n+1];
X.best_sum=0;
X.p_sum=0;
X.w=new int [n+1];
for(int i=1;i<=n;i++)
X.w[i]=i;
X.Backtrack(1);
delete X.Q;
delete X.P;
delete X.w;
return X.best_sum;
}
void main()
{
cout<<"请输入男运动或女运动员的人数:"<<endl;
int n;
cin>>n;
int **p=new int*[n+1];
for(int i=1;i<=n;i++)
p[i]=new int [n+1];
int **q=new int*[n+1];
for(int i=1;i<=n;i++)
q[i]=new int [n+1];
cout<<"混双中男运动员的竞赛优势:"<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cin >> p[i][j];
}

cout<<"混双中女运动员的竞赛优势:"<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cin >> q[i][j];
}

cout<<"男女运动员配对的最佳方案优势的总和是:"<<allocation(p,q,n)<<endl;
}
**********************************************************
不知道到底哪里有问题,运行的结果有问题 请教一下大虾们
...全文
216 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yao450860487 2009-12-07
  • 打赏
  • 举报
回复
算法设计:设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

数据输入:第一行有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
*************************************************************************
最佳方案就是使男女运动员组合产生的优势总和最大
*************************************************************************
我的运行结果为0
不晓得哪里有问题
kouwenlong 2009-12-07
  • 打赏
  • 举报
回复
什么事最佳方案,只有你知道。
断点调试下,看看那里问题。

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧