Ну, если ты уверен, что итог правильный...
Лично я не могу вот так с ходу математически доказать, что программа работает правильно, т.к. твой алгорим не есть простое переложение задачи. Хотя, наверное, да. Будет работать...
Я бы, все-таки, делал прямо так, как написано в задаче.
Код:
...
SetLength(C,0);
For I := Low(B) To High(B) Do
If B[0,I] = 0 Then
Begin
SetLength(C,LEngth(C)+1);
SetLength(C[High(C)],Length(B[i]));
For J := Low(B[i]) To Higth(B[i]) Do C[High(C),J] := B[i,J];
End;
...
Что-то типа того.