我有一个问题涉及优化包含 2 名玩家的游戏。所以我们有一个有许多边和一些顶点的无向连通图。每个玩家都必须删除边,如果一个顶点被孤立,他的分数会增加一,然后你必须删除另一条边。该图以所谓的“邻接矩阵”表示。对于数组中的每个顶点,两个顶点之间都有一个连接例如,如果我们有一个三角形,我们有以下数组:
0 1 1 第一行
1 0 1 第二行
1 1 0 第三排
行对应于顶点,列对应于它与其他顶点的可能连接。我们被分配使用递归函数来应用蛮力。我花了很多心思来编写这个函数的代码。我实现了一些代码并编译并运行它。我完全不知道为什么它不起作用。我的这个功能的代码:
class Matrix {
public:
int berekenZet (bool** array, bool player);
int berekenScore (bool** array, int rij, int kolom);
bool checkRij (bool** array, int rij);
void setGetal (int nummer) {getal = nummer;};
Matrix ();
private:
int getal;
int maxScoreA;
int huidigScore;
int maxverschil;
int maxScoreB;
int tellerHuidig;
矩阵::矩阵() {
huidigScore = 0;
maxScoreA = 0;
maxScoreB = 0;
}
bool Matrix::checkRij (bool** array, int rij) {
for (int i=0; i<getal; i++) {
if (array[rij][i] == true)
return false;
}
return true;
}
int Matrix::berekenScore (bool** Array, int rij, int kolom) {
if (checkRij (Array, rij) == true )
huidigScore ++;
if (checkRij (Array, kolom) == true)
huidigScore ++;
return huidigScore;
}
int Matrix::berekenZet (bool** array, bool player) {
int score = 0;
int bestescore = -5;
int slechtstescore = 5;
int something;
something = 0;
for(int i = 0; i < getal; i++){
for(int j = i + 1; j <getal; j++){
huidigScore = 0;
if(array[i][j]){
something++;
array[i][j] = false;
array[j][i] = false;
score = 0;
if(player == true){
score = score + berekenScore(array, i ,j );
}
else{
score = score - berekenScore(array, i, j);
}
cout << "player" << player << endl;
cout << "score" << score << endl;
if(huidigScore == 0)
score = score + berekenZet(array, !player);
else
score = score + berekenZet(array, player);
if(player == true && score > bestescore)
bestescore = score;
else if(player == false && score < slechtstescore)
slechtstescore = score;
array[i][j] == true;
array[j][i] == true;
} //if
}//for
}//for
if(player == true && something != 0){
cout << "bestescore" << bestescore << endl;
return bestescore;
}// if outside of double for loop
else if(player == false && something != 0){
cout << "slechtstescore" << slechtstescore << endl;
return slechtstescore;
} // else if outside of double for loop
else if(something = 0){
cout << "bestescore" << bestescore << endl;
return 0;
} // determine whether array was empty when function was called
bestescore 和 slechtstescore 是荷兰语的最佳和最差分数。berekenScore 调整删除边后获得的点数并将其保存在 huidigScore 中。所以基本上是 0、1 或 2。
我在 int main 中调用这个函数:
cout << "Aantal takken: " << takken << endl;
a = matrix.berekenZet(Array, player);
我使用以下邻接矩阵运行它:
5
0 1 1 1 1
1 0 1 0 0
1 1 0 0 0
1 0 0 0 0
1 0 0 0 0
它只输出“score”5次,所以它似乎忽略了函数中的for循环,bestescore曾经设置为几百万值,然后设置为5。我不是一个很有经验的程序员,所以我可能只是错过了什么..??