-2
//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

无效 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;

}

4

1 回答 1

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内容作为练习留给读者。

于 2013-06-20T06:09:03.970 回答