• Was ist die Idee hinter diesem Programm, und wie vermeidet es nichtzusammenhängende Wege?

    Hallo Georg,


    ich habe deine Frage erst heute gelesen. Die Idee des Programms ist, die Felder von links oben nach rechts unten zeilenweise durchzugehen und zu schauen, welches der 6 Kurventeile hineinpasst. Dabei tracke ich als status die offenen Enden. Die Codierung ist in folgendem Beispiel gezeigt:

    Code
    1. ┌─┐┌┐┌─┐
    2. └┐└┘1202
    3. 0100(0)

    Hier ist der status in der zweiten Zeile und 5. Spalte codiert durch 0100(0)1202. Vor der Klammer stehen die nach unten offenen Enden der neuen (zweiten) Zeile, in Klammern das offene Ende des linken Nachbarn des aktuellen Feldes, und danach die offenen Enden der vorhergehenden (ersten) Zeile. Man kann sich überlegen, dass es immer nur eine oder zwei Möglichkeiten gibt, Kurventeile einzupassen.

    Code
    1. 0 b b 0 0 b
    2. 0 ┌ a 0 │ 0 0 └ b a ─ a a ┐ 0 a ┘ 0
    3. a b 0 0 a 0

    Einen rekursiven Aufruf starte ich nur, wenn ich ein gerades Stück einfügen kann oder muss. Den Fall eines Kurvenstückes behandle ich ohne rekursiven Funktionsaufruf. Nicht zusammenhängende Wege werden dadurch vermieden, dass zwei offene Enden mit der gleichen Kennung nur beim Erreichen des letzten Feldes zusammengefügt werden dürfen.

  • Ich habe das Python-Programm von st1974 nach Java portiert und erweitert, so dass es auch bei der Minimalanzahl von Viertelkreisen (d. h. Maximalanzahl von Geradenstücken) noch schnell läuft. Es erzeugt die Grafiken zur übergebenen Schachbrettgröße für eine feste Anzahl (oder alle möglichen) Geradenstücke.

    Direkter Download der aktuellen Version 1.1: https://mega.nz/file/eFxXBQiC#…6Fy2BETvb1JaS6xqGThN8ko3w


    Viel Spaß!