Python :: Aufgabe #73 :: Lösung #2

2 Lösungen Lösungen öffentlich
#73

Das ist das Haus vom Nikolaus

Anfänger - Python von eulerscheZhl - 12.03.2015 um 10:20 Uhr
Schreibe ein Programm, das alle Lösungen des Haus vom Nikolaus findet.
#2
vote_ok
von AlexGroeg (2010 Punkte) - 10.02.2020 um 20:15 Uhr
Quellcode ausblenden Python-Code
## nikohaus.py 
## Programm setzt das "Haus-des-Nikolaus"-Problem algorithmisch mit
## einer Adjazenzmatrix um und gibt die Möglichkeiten aus, wieviel mal 
## das Haus von jeder seiner Ecken ausgehend aufgebaut werden kann.


def haus_rek(mtrx, start, kn, count, weg):
        
        ''' Berechnen und Ausgabe der Moeglichkeiten '''
        
        for i in range(5):                                              # eine Matrix-Zeile durchgehen
                if mtrx[kn][i] == 1:                                    # wenn mit anderer Zeile verbunden...
                        weg_neu = "{0} -> {1}".format(weg,i)
                        #print(weg_neu)
                        if count == 7:                                  # Haus komplett errichtet
                                zaehl[start] +=1                        # Moeglichkeiten hochzaehlen
                                if start == 0:
                                        print("{0}: {1}".format(zaehl[start], weg_neu))
                                        continue
                                return
                        mtrx[kn][i] = 0; mtrx[i][kn] = 0                # diese Wege streichen
                        haus_rek(mtrx, start, i, count +1, weg_neu)     # naechster Knoten
                        mtrx[kn][i] = 1; mtrx[i][kn] = 1                # Wege wieder herstellen
        
        zaehl[start +5] +=1                                             # Nicht-Moeglichkeiten hochzaehlen



##--- main() ------------------------------------------------------------

# Adjazenzmatrix des "Haus' vom Nikolaus"
#         4                                                              
#        / \
#       2 - 3
#       | X |
#       0 - 1

mtrx = [[0,1,1,1,0],                      
        [1,0,1,1,0], 
        [1,1,0,1,1], 
        [1,1,1,0,1],
        [0,0,1,1,0]]


zaehl= [0] *10                                                          # speichert die Konstruktionsmöglichkeiten ab


print("Konstruktionsmoeglichkeiten vom Knoten 0 aus:\n")
for i in range(5):                                                      # alle Knoten einmal als Anfangsknoten
        weg = "{0}".format(i)
        haus_rek(mtrx, i, i, 0, weg)                                    # mtrx, start, kn, count, weg


for i in range(5): 
        print("\n-> Von Knoten {0} aus gibt es {1} Moeglichkeiten, {2} Sackgassen.".format(i, zaehl[i], zaehl[i +5]))

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2105823

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.