Labyrinth Rekursiv durchsuchen Performance?

Ich bin dabei ein Labyrinth Rekursiv zu durchsuchen. Klappt auch bei kleinen Labyrinthen.

Code ist folgender, sollte eigentlich selbsterklärend sein denk ich. Problem ist nun folgendes. Der Professor hat viele JUnit Tests geschrieben und bei großen Labyrinthen dauert es zu lang (4s) und bricht daher ab. Wie schreibe ich den Code Performanter? Oder hab ich einen Denkfehler im Code?

Sprache natürlich Java

Ich kann nicht ausschließen, dass die Tests nicht dazu da sind zu erkennen wie performant der Code generell ist. Heißt, dass man guckt wie viele Tests er schafft um zu wissen welche Performance klasse man so etwa hat.

Stack<Coordinate> shortestPath;

private void recursivelyDiscoveryMaze(int x, int y, int depth, Stack<Coordinate> currentPath) {
    //this.maze.prettyPrint();
    currentPath.push(new Coordinate(x, y));
    if (dX == x && dY == y) {
        if (shortestPath.size() > currentPath.size() || shortestPath.size() == 0) {
            shortestPath = (Stack<Coordinate>) currentPath.clone();
        }
        currentPath.pop();
        return;
    }

    this.maze.getMazeField()[x][y] = 1; //set visited
    depth++;
    if (isValidStep(x + 1, y)) //if can be visited
        recursivelyDiscoveryMaze(x + 1, y, depth, currentPath);
    if (isValidStep(x, y + 1))
        recursivelyDiscoveryMaze(x, y + 1, depth, currentPath);
    if (isValidStep(x - 1, y))
        recursivelyDiscoveryMaze(x - 1, y, depth, currentPath);
    if (isValidStep(x, y - 1))
        recursivelyDiscoveryMaze(x, y - 1, depth, currentPath);
    depth--;
    this.maze.getMazeField()[x][y] = 0; //set unvisited 
    currentPath.pop();
}
Computer, Mathematik, programmieren, Java, Informatik, labyrinth, Rekursion
Taschenrechner in C: Könnt ihr mir bei der Überprüfung des Operators helfen?

Hallo Community,

ich bräuchte Hilfe bei meinem C-Code. Ich komme nicht weiter bei der Überprüfung vom Taschenrechner. Ich möchte, dass der Operator überprüft werden soll. Sprich bei allen anderen Buchstaben außer A, S, M, D soll der Benutzer eine neue Angabe machen.

Hier mein Code:

int main()
{
  // Deklarierung der Variablen
  char auswahl;
  float zahl1, zahl2;
  float ergebnis;

  // Auswahl vom Rechenoperator
  printf("Wie moechtest du Rechnen?\n");
  printf("(a) Addieren\n");
  printf("(s) Subtrahieren\n");
  printf("(m) Multiplizieren\n");
  printf("(d) Dividieren\n");
  scanf("%c", &auswahl); // %c für char Variablen

  while () {
    if (auswahl != 'a' || 's' || 'm' ||'d') {
      printf("\nFalsche Eingabe. Waehle eine neue:");
    }
  }

  // Eingabe der Zahlen
  printf("Gib deine erste Zahle ein: ");
  scanf("%f", &zahl1);
  printf("Gib deine zweite Zahle ein: ");
  scanf("%f", &zahl2);

  // Auswahl-Auswertung vom Benutzer
  switch (auswahl) {
    case 'a':
      ergebnis = zahl1 + zahl2;
      break;
    case 's':
      ergebnis = zahl1 - zahl2;
      break;
    case 'm':
      ergebnis = zahl1 * zahl2;
      break;
    case 'd':
      ergebnis = zahl1 / zahl2;
      break;
    default:
      break;
  }

  // Ergebnisasugabe
  if (auswahl == 'a') {
    printf("\nErgebnis:\n%.1f + %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  if (auswahl == 's') {
    printf("Ergebnis:\n%.1f - %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  if (auswahl == 'm') {
    printf("Ergebnis:\n%.1f * %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  if (auswahl == 'd') {
    printf("Ergebnis:\n%.1f / %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  printf("\n\n");
  return 0;
}
Computer, programmieren, Informatik, Programmiersprache, C (Programmiersprache)

Meistgelesene Beiträge zum Thema Computer