(a) That's wrong. B should certainly not accept that the contract is frustrated. The important difference between this contract and the previous example is that in the present case the events that radically changed the situation are due to A's failure to maintain the ship in a seaworthy condition. That is what caused the ship to sink.
When a supervening event is caused by either party, and could have been avoided, that party cannot rely on the doctrine of frustration to escape their liability under the contract. In the present case, although the ship is not available, A will be liable to pay damages for the breach of the contract with B.