//2D array with row4 and column4
11 12 18 40
14 15 13 22
11 17 19 23
17 14 20 28
我的问题是如何循环这样的想法 。循环为[0] [0] = 11时。 对于相同的整行12,18,40和相同的整列14,11,17都不能计数。之后,我的第二次循环将只循环表样本这样
**11** **12** **18** **40**
**14** 15 13 22
**11** 17 19 23
**17** 14 20 28
我的循环只能在没有**的情况下读取这些数字。 第二次。将选择第二列,哪个数字最小并存储到变量temporaryA中,第三个循环将选择第三列,选择最小值并存储到temporaryB,第四个循环将选择第四列并存储到temporaryC
最后。我的回答将是我刚才选择的第一个数字 ANswer = 11 + temporaryA + temporaryB + temporaryC
void BranchandBound(int ** minimumCost,int p,int j){
/*
11 12 18 40
14 15 13 22
11 17 19 23
17 14 20 28
*/
bool *stars = new bool[4];
int totalMin = 0;
for( int y = 0 ; y < p ; y++ ){
int min,iMin = -1;
for( int x = 0 ; x < j ; x++ ){
if( !stars[y] || (iMin < 0 || min > minimumCost[y][x]) ){
min = minimumCost[y][x];
cout << "minimum : " << min << endl;
iMin = min;
totalMin += min;
}
stars[iMin] = 1;
}
}
cout << "Total : " << totalMin << endl;
}
答案 0 :(得分:0)
您想要排除最小值的列(在您的问题中标有星号)。让我们记住它们:
bool stars[4] = { 0 };
现在像往常一样找到最低限度......
for (int y = 0; y < sz; y++) {
int min, iMin = -1;
for (int x = 0; x < sz; x++) {
在这里,我们必须跳过已经最小的列:
if (!stars[x] && (iMin < 0 || min > numbers[x][y])) {
min = numbers[x][y];
iMin = x;
}
现在记住下一个最小值来自哪里:
stars[iMin] = 1;
}
}
完成!将所有min
相加作为练习留给读者。