这可能听起来真的很无聊,我可能错过了一些非常愚蠢的东西..但是,我正在尝试计算矩阵之间的差异,而具有最小值(结果)的那个是匹配数。但是,由于某种原因,我的算法似乎缺少最小的数字,我无法弄清楚为什么..
以下是代码:
int min_val = 0;
double comp = 0;
const int ROW_BOUNDS(mat1Rows-mat2Rows+1);
const int COL_BOUNDS(mat1Cols-mat2Cols+1);
for(int i=0; (i < ROW_BOUNDS); i++) {
for(int j=0; (j < COL_BOUNDS); j++) {
m3.clear();
for (int row(0); row < mat2Rows; row++){
for (int col(0); col < mat2Cols; col++){
//cout << matrix1[i*mat1Cols+row*mat1Cols+col+j] << ' ';
m3.push_back( matrix1[i*mat1Cols+row*mat1Cols+col+j] );
currentRow = i;
currentCol = j;
}
}
comp = compMatrix1(matrix2, m3);
//printMatrix(m3, 2, 2);
//cout << endl << " = " << comp << endl;
if(comp < min_val)
{
minRow = currentRow;
minCol = currentCol;
m4 = m3;
min_val = comp;
cout << min_val;
}
}
}
//printMatrix(m4, 2, 2);
这是输出:
0 0
0 0
= 2
0 1
0 1
= 4
1 0
1 0
= 0
0 0
1 1
= 2
0 1
1 1
= 3
1 0
1 0
= 0
1 1
0 1
= 3
1 1
1 0
= 1
1 0
0 0
= 1
打印:
0 0
0 0
当实际结果应为:
1 0
1 0
有人可以提供任何帮助吗?
答案 0 :(得分:1)
几个问题:
comp = compMatrix1(matrix2, m3);
compMatrix1是什么样的?什么是matrix2?
您还可以解释以下代码的作用吗?
m3.push_back( matrix1[i*mat1Cols+row*mat1Cols+col+j] );
您可能只是不正确地比较矩阵或未正确填充m3。此外,
int min_val = 0;
将最小值初始化为低于某些值。当最低值实际为2时会发生什么?那么没有矩阵会有min_val。
答案 1 :(得分:1)
您的min_val
为零,这意味着您的条件if(comp < min_val)
仅会捕获负微量数据。
所以,要解决此问题,请更改
int min_val = 0;
到
int min_val = INT_MAX;
这可确保第一个计算矩阵的条件(comp < min_val)
为真。
答案 2 :(得分:0)
min_val应初始化为大于MAXIMUM可能值。