如何找到第一列和最后一列的索引以及不包含零或仅包含内部的第一行和最后一行?

时间:2013-11-01 22:54:59

标签: c++

我的01填充在vector<int>内的矩阵由行填充(第一行,第二行等等)。如何找到第一列和最后一列的索引以及不包含零或仅包含内部的第一行和最后一行? 我已经用循环迭代了四次并进行比较但是有更快更优雅的方法吗?

for example result here is columns with indexes 1 and 4 and rows with 1 and 4.
0 0 0 0 0 
0 0 1 0 0
0 1 0 0 1
0 0 0 0 0
0 0 0 1 0 

1 个答案:

答案 0 :(得分:0)

我想说,你只需要两次迭代:一次迭代用于行,一次迭代用于列。

如果我理解正确的问题,这个编码应该显示它是如何编码的(只是草稿):

int firstRow = -1;
int lastRow = -1;
for (row=0; row<numRows; row++) {
   int cnt = 0;
   for (col=0; col<numCols; col++) {
      cnt += vec[row][col];
   }
   if (cnt != 0 && cnt != numCols) {
      if (firstRow == -1) firstRow = row;
      lastRow = row;
   }
}
// output firstRow, lastRow

为列做同样的事。

此编码不一定比四次迭代更快。当从开始和结束进行四次迭代时,如果列更接近限制,则它们更快。但它可以节省一些编码。