男女运动员最佳配对问题
#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;
}
**********************************************************
不知道到底哪里有问题,运行的结果有问题 请教一下大虾们