找到矩阵中只有'0'元素的第一行的最佳方法?

时间:2014-03-02 23:49:21

标签: c++ optimization matrix while-loop sentinel

我不会去了解它:我为编程任务得到了一个优化作业,我需要确认我的解决方案是正确的。

任务是下一个:你得到一个随机行数的矩阵,每行的长度不同。我们得到的矩阵中有标记:每行末尾有一个-1值。矩阵的最后一行以-1值开头。矩阵的每个其他值都是正整数和0。

任务是找到第一行,它只有0个元素(不包括sentinel,然后写它 - 同样,我只需要使用2个变量,一个while循环,并且其中包含一个条件。写作可能会在条件下发生。

总的来说,代码必须具有这样的一般形式(不包括矩阵的定义:

//'sor' means row, 'oszlop' means coloumn

int sor, oszlop;

while(){
    if(){

    }else{

    };
}

if (){
cout <<"We couldn't find a row with only 0 elements."<<end; 
}else{                                      
cout <<"We could, and this is:"<<end;   
}

这是我的代码(只有main()内的部分,也排除了矩阵的定义):

int sor=0, oszlop=0;                    

while (x[sor][oszlop]!=-1){             
    if (x[sor][oszlop]==0){ 
        ++oszlop;           
    }else{      
        ++sor;  
        oszlop=0;           
    }
}

if (oszlop==0){
cout <<"We couldn't find a row with only 0 elements."<<end; 
}else{                                      
cout <<"We could, and this is:"<<end;   
}

代码跳过无效的coloumns,直到它结束;或者如果它可以到达任何行的末尾则退出 - 但只有当它的所有元素都为0时它才能执行。

在找到-1时肯定会退出,但是oszlop的值决定了,我们是否找到了有效行,或者我们不能,并且因为到达矩阵的末尾而退出。< / p>

我用随机矩阵测试了它,但我仍然不确定,所以我需要你的确认。

我做得好吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试在矩阵上进行测试,其中唯一有效的行是最后一行?比如说,

[ - 1;
-1 0 -1]

或者

[1 -1;
-1 0 -1]

如果每行必须有一些除-1以外的元素。