Es wurde ja schon angedeutet. Es gibt nur eine Möglichkeit 9 Schiffe auf einem 5x5 Feld unterzubringen. In deinem Fall setzt du ein Schiff sobald du eine aktuell mögliche Position gefunden hast. Die aktuell gefundene Position stellt sich aber nachträglich vielleicht als schlecht heraus.
[0, 0] ist die Zelle ganz oben links in deinem Feld und [4, 4] die ganz unten rechts. Jetzt stell dir vor dein Algorithmus wählt Zelle [1, 1] für das erste Schiff aus. Jetzt verteilt er munter Schiffe bis er an den Punkt kommt dass er kein freies Feld mehr findet. Das Problem ist, dass Zelle [1, 1] in der einzig möglichen Lösung 9 Schiffe auf dem Feld zu verteilen nicht belegt sein kann.
Was du jetzt machen kannst um das Problem zu lösen nennt sich
Backtracking. Dabei nimmst du gesetzte Schiffe wieder zurück wenn du keine neue Position finden kannst. Da du in deinem Fall nicht alle möglichen Positionen testest, sondern diese zufällig bestimmst, musst du irgendwie anders entscheiden wann du deinen backtrack-Schritt machst. Eine Möglichkeit wäre vorab alle Positionen in einer Liste zu speichern. Jetzt wählst du immer zufällig ein Element der Liste und guckst ob es als nächste Position für ein Schiff taugt. Gibt es keine möglichen Positionen mehr, so machst du eben deinen backtrack-Schritt.
Hilft dir das weiter?