Ich habe dieses Problem, das ich auf die effektivste Art und Weise lösen muss. Ich habe ein 2D-Array, das Folgendes enthält: Alles, was eine 1 ist, ist eine "Wand", was bedeutet, dass Sie nicht durchgehen können. 2 ist der Eingang, wo Sie das Array oder die Karte "betreten", wenn Sie möchten. 3 sind die Dinge, die wir finden müssen. Hier ist ein Beispiel einer Karte:Finden Sie "Nummer" in einem 2d-Array
1111111
1 3131
2 11111
1 31
1111111
Dies ist ein Beispiel eines Arrays sein könnte, die ich brauche, um aussehen Wie Sie sehen können gibt es eine 3 ist, die „nicht erreichbar, da es von einer Mauer umgeben ist“. .... 1" , was bedeutet, dass es zwei verfügbaren Zahlen in diesem Array
Zuerst haben wir den Eingang finden müssen Da der Eingang überall sein kann ich das gesamte Array suchen muss ich habe folgendes getan:
int treasureAmount = 0;
Point entrance = new Point(0,0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; i++){
if(map[i][j] == 2){
entrance.x =i;
entrance.y =j;
}
}
Dies dauert O (n^2) Zeit, und ich sehe nicht wirklich eine andere Möglichkeit, dies zu tun, seit Der Eingang kann überall sein. Allerdings bin ich nicht wirklich sicher, wie man die verfügbaren Nummern effektiv und schnell findet. Ich dachte darüber nach, während ich die Arrays nach dem Eingang suche, gleichzeitig finde ich die ganze Nummer 3 im Array, obwohl einige nicht zugänglich sein könnten, und danach bin ich nicht wirklich sicher, wie ich effektiv finde welche zugänglich sind.
O (n^2) (oder O (mn)) ist das Beste, was Sie hier tun können. Die Sache ist, ob Sie es in weniger Operationen tun können oder nicht ... – nhahtdh
_ "Zuerst müssen wir den Eingang finden ... der Eingang kann überall sein" _ ist der Eingang buchstäblich überall, oder ist es auf den "Umkreis beschränkt "von der Array - wie in dem Beispiel, das Sie bereitstellen? – stormCloud
Der Eingang kann überall im Array sein. Es könnte in der Mitte oder auf der "Kante" sein. –